Multi-Suchformular für DB

Bicko

Erfahrenes Mitglied
Hi,

habe folgendes Problem, ich habe eine Webseite mit einem Suchformular für eine Datenbank. Über das Suchformular möchte ich die Möglichkeit haben, verschiedene oder auch nur eine Kategorie auszuwählen.

Als Beispiel:

Ich möchte Bilder angezeigt bekommen. Nun soll man auswählen können, entweder alle Landschaftsbilder anzeigen oder auch alle Landschaftsbilder, die kleiner als 800 x 600 sind...

Eine einzelne Select-Anweisung bekomme ich ja hin, also:
select * from Bilder where Art='$art'

aber das kombinieren unterschiedlicher Suchbegriffe Es könnte ja 10 Landschaftsbilder geben, aber wenn ich die Größe noch beschränke sind es vielleicht nur noch 2...

Es gibt insgesamt 4 verschiedene Suchmöglichkeiten, die also entweder für sich alleine oder in Kombination arbeiten sollen. Kann man das Ganze in einer Select-Anweisung unterbringen oder wie funktioniert so etwas? Suche schon den ganzen Tag nach einer Lösung, aber irgendwie fehlt mir immer noch der Ansatz.

Hoffe es weiß jemand Rat. Vielen Dank im voraus.
 
Hi!

Bin mir nicht sicher, ob Du das suchst, aber Du kannst Dein WHERE doch beliebig erweitern:

... WHERE art="$art" AND height>$height AND pic_format="jpg" ...
 
@Pinky_M,

stimmt schon, aber was ist wenn ich nicht alle Sachen auswähle. Also wenn ich keine Größe eintippe, dann ist da auch kein Wert drinn. Dann gibt es doch sicherlich Probleme mit dem "And".

Ich habe auch noch den Wert "Alle" zur Auswahl und habe gerade festgestellt das das ein weiteres Problem ist. Denn Landschaftsbilder ist der value="1", das bedeutet das ich das leicht aus der Datenbank suchen kann, was aber wenn der Scuhbegriff "Alle" angewählt ist?
 
Hi!

Ja, aber das ist doch normal! Ich würde grundsätzlich nie die Daten des Clients direkt in Queries übernehmen - wer weiß, was der eingibt...
(bei einer Suchfunktion würde ich z.B. die minimale Anzahl der Buchstaben begrenzen -> die Suche nach "a" macht keinen Sinn...)
Somit schau, was Du vom Client bekommen hast - per PHP oder Perl ? - und baue Dir anhand dessen das Where-Statement zusammen.

Ein "AND" ohne Folge (oder "OR" ) ist dabei natürlich nicht "brauchbar", aber das kannst Du doch abfangen...
 
Hi

ohne Pinky jetzt vorgreifen zu wollen..

Ich z.B. gebe in komplexen Suchformularen den Variablen immer einen Default-Wert.

Defaultwert = 1
wenn Formularfeld ausgefüllt also ungleich <> nichts dann
Defaultwert = Wert des Formularfeldes
 
Zuletzt bearbeitet:
Ich verstehe das Ganze dennoch nicht. Wenn z.B. keine Größe angegeben wird, was passiert denn dann. Das bedeutet doch das es dem User egal ist, wie groß das Bild ist, er möchte einfach alle Landschaftsbilder sehen. Der nächste möchte aber nur die Landschaftsbilder mit Größe x sehen.

Wie soll denn dann die Select Anweisung mit where und And erfolgen?
 
Hi!

Du wertest doch die Form mittels Script aus. Benutzt du Php oder Perl?

Und dort schaust du halt, ob z.B. ein Wert gesetzt ist oder nicht und ob er korrekt ist .
@Luzie: Ja, klar, auch! Eine Überprüfung ist allerdings nie schlecht, da sich eine Form ja auch "händisch" abschicken lassen kann.
Überhaupt würd' ich bei der Erstellung der Form gleich schauen, ob sich Tautologien ausschließen lassen: statt eine "Alle" checkbox die anderen Checkboxes so benennen, das klar ist, daß wenn nix ausgewählt ist, "alles" gefunden wird... (alternativ: Radiobuttons).

Anhand dieser Informationen bastelst Du Dir Deine Query (z.B. Perl):
$size = "size>$form_size" if ($form_size);
$art = "art=\"$form_ar\" if (($art eq "landschaft") || ($art eq "autos"));
if ($form_all) {
$size = "";
$art = "";
}
$where = $size.(($size && $art) ? " AND " : "").$art;
$statement = "SELECT * FROM $db WHERE $where";
... wirklich nur die Grundidee! Nicht "gebrauchen" - nonsense.
Aber Dir muß klar sein:
-Du bekommst Daten von einer Form.(Punkt)
-Diese Daten formst Du zu einer "gültigen" Where-Anweisung (bzw. kompletten Query: User könnte auch die DB wählen oder das ORDER BY bestimmen).
-... und erhälst damit Daten der DB...
 
@Pinky_M,

zu Deiner ersten Frage... ich benutze PHP. Also wenn ich Dich richtig verstehe, dann muss ich die SQL Anweisung dynamisch zusammensetzen?
Oder gibt es noch einen anderen Weg?
 
Hi!

Hm...ja..., sorry, ich dachte das würde durch obiges deutlich...

@Dynamisch: naja, irgendetwas dynamisches wird's schon sein, da ja Dein Client selbst wählen kann, was er sehen will ! ? !
In dem Sinne von "undynamisch", sprich eine Query, die alle Form-Parameter nimmt und selbst schaut, ob die where-Abfrage sinnig ist oder nicht - hui, geht vielleicht sogar, ist aber glaube ich nicht die Stärke von MySql :)

Ich weiß leider nicht mehr, wie ich es deutlicher machen sollte. Hinzu komme ich von Perl und mag jetzt nicht eventuell fehlerhafte Php-Scripts zum besten geben...
 
Gut, dann werde ich mal mein Glück damit versuchen. Mal schauen wie weit ich mit dem Zusammensetzten komme. Vielen Dank schonmal für die Hilfe.

Ach ja, sollte jemand noch eine andere Lösung haben... für weitere Lösungsansätze wäre ich sehr dankbar.
 

Neue Beiträge

Zurück