Bitte um Hilfe zur korrekten Formulierung eines SELECT für eine Suche

JohnnyJohnzon

Grünschnabel
Hallo Forumler,

Ich hoffe ihr könnt mir hier weiterhelfen, ich habe schon gesucht konnte aber nichts finden, vielleicht bin ich ja auch einfach nur zu blöd die Suche richtig zu nutzen. Ich beschäftige mich noch nicht lange mit der ganzen Materie und stoße nun auf ein Problem.

Ich habe eine Tabelle buecher.
id, lagernummer, themengebiet, titel, autor, verlag, erscheinungjahr, isbn

In dieser Tabelle sind in den Feldern themengebiet, autor und verlag die jeweiligen id-Nummern aus anderen Tabellen gespeichert.

Ein Formular in der die User den standort, Suchwort und isbn eingeben können und drei auswahllisten in der die User den Autor, das Themengebiet und den Verlag auswählen können. Dieses Formular übergibt mir die Variablen:
lagernummer -> die eingegebene Nummer im Feld standort
titel -> das eingegebebene Wort im Feld Suchwort
isbn -> die eingegegebene Nummer im Feld isbn
themengebiet -> die id des entsprechenden Themas
autor -> die id des entsprechenden Autors
verlag -> die id des entsprechenden Verlages

Soweit funktioniert das ganze auch. Das Problem ist das ich nicht weiß wie ich den Select den ich zur Tabelle schicke richtig gestalte damit ich auch die richtigen Ergebnisse angezeigt bekomme. Ich habe es mit folgendem versucht:
SELECT * FROM buecher WHERE (lagernummer LIKE '$%lagernummer%') AND (titel LIKE '%$titel%') AND (themengebiet LIKE '%$themengebiet%') AND (autor LIKE '%$autor%') AND (verlag LIKE '%$verlag%') AND (isbn LIKE '%$isbn%')

Nur das kann es ja noch nicht sein, die Ausgabe entspricht nicht dem gewünschten Ergebnis. Wenn ich jetzt ein Thema auswähle das die id 1 hat werden mir diese angezeigt aber auch themen die z.b. die id 12 oder 14 oder was auch immer haben. Dieses ist natürlich auch bei den anderen Feldern die eine Id übermitteln der Fall. Außerdem gibt es jede Lagernummer ja nur einmal das heißt wenn ich 111 111 111 1 angeben würde, dann dürfte ich ja nur ein Buch angezeigt bekommen und nicht auch noch das Buch das vielleicht die lagernummer 111 111 111 11 hat. Muss ich vielleicht erst eine Abfrage machen nach dem Motto, wenn Feld1 und Feld2 nicht leer und alle anderen Felder leer sind dann mache folgendes, also alle möglichen Eingabekombinationen des Suchformulares abfragen und dann ensprechend handeln?

Ich suche also nach einer Lösung wie ich es hinbekomme das mir auch immer nur exakt die Bücher ausgegeben werden die mit ALLEN vorher in das Suchformular eingegebenen Werten übereinstimmen.

Kann mir jemdand einen Tipp geben wie soetwas gelöst wird? Ich hoffe mein Problem, zumindest ist es für mich als Anfänger ein Problem, wurde einigermaßen verständlich. Damit ihr euch das ganze besser vorstellen könnt habe ich ein Screenshot vom Formular und vom Quelltext online gestellt zum Screenshot (ich hoffe das verstößt nicht gegen die Forumsregeln).

Ich hoffe es gibt mir jemand einen Tipp wie ich das ganze lösen kann.

Mfg
Johnny
 
Zuletzt bearbeitet:
die lösung ist: nicht überall mit like arbeiten..

themengebiet -> die id des entsprechenden Themas
autor -> die id des entsprechenden Autors
verlag -> die id des entsprechenden Verlages

bei id (also integerwerte) macht es kein sinn mit like zu arbeiten.

SELECT * FROM buecher WHERE (lagernummer LIKE '$%lagernummer%') AND (titel LIKE '%$titel%') AND (themengebiet = '$themengebiet') AND (autor = '$autor') AND (verlag = '$verlag') AND (isbn LIKE '%$isbn%')

wobei, wenn es möglich ist das die ids thema,verlag,autor auch leer sein können, müssen diese teile in der where abfrage entfernt werden wenn sie leer sind.
 
Hallo,

erstmal vielen dank für die schnelle Antwort. Aber genau da liegt ja mein Problem, alle Eingabefelder können seperat angegeben werden, es ist also möglich das NUR lagernummer angegeben ist.
Select * From buecher WHERE (lagernummer='$lagernummer');
Es kann aber auch sein das NUR ein suchwort angegeben ist.
Select * From buecher WHERE (titel LIKE '%$titel%');
Es könnte auch sein das suchwort UND themengebiet angegeben wurde.
Select * FROM buecher WHERE (titel LIKE '%$titel%' AND themengebiet='$themengebiet');
es könnte aber auch sein das suchwort, thema und Verlag angegeben wurde.
SELECT * FROM buecher WHERE (titel LIKE '%$titel%' AND themengebiet='$themengebiet' AND verlag='$verlag')

usw. usw.

Genau dafür suche ich eine Lösung. Alles zusammen in einen Select kann ich ja nicht schreiben wie bekomme ich es hin das immer der richtige Select ausgeführt wird. Ich habe die Vorstellung das man zunächst erst prüfen muß in welchen Variablen ein Wert ist und anhand dieser Prüfung dann den entsprechenden Select ausfürhren zu lassen. Ich weiß halt nicht wie ich soetwas umsetzen kann.

Mfg
Johnny
 
ist doch einfach:

die abfragen die textfelder haben können ja bei like bleiben.

PHP:
$sql = "SELECT * FROM buecher WHERE (titel LIKE '%$titel%') AND (isbn LIKE '%$isbn%')";

if (isset($lagernummer)] {
 $sql = $sql . " and (lagernummer = '$lagernummer')";
}
if (isset($themengebiet)) {
 $sql = $sql . " AND (themengebiet = '$themengebiet')";
}
if (isset($autor)) {
 $sql = $sql . " AND (autor = '$autor')";
}
if (isset($verlag)) {
 $sql = $sql . " AND (verlag = '$verlag')"; 
}

# und nu deine abfrage
 

Neue Beiträge

Zurück