Erstellen einer dynamischen such-Abfrage mit PHP und MySQL
Ich versuche zu erstellen, die eine dynamische Suchabfrage auf der Grundlage der Benutzereingabe.
Anforderungen:
- Könnte ein Benutzer füllen Sie keine, einige, oder alle Felder.
- Die Abfrage sucht in einer Tabelle nach einem Datensatz entspricht allen Anforderungen.
Nun ich habe meine Forschung getan, und ich fand heraus, mehrere Möglichkeiten, dies zu tun. Aber keiner von Ihnen arbeiten, und wenn Sie es tun, Sie sind weit entfernt von der Praxis.
Versuch:
Im moment mache ich eine Abfrage erstellen, wie diese:
SELECT *
FROM assignments
WHERE (id = $id OR id = '')
AND (field1 = $field1 OR field1 = '')
Diese Abfrage funktioniert, aber nur, wenn Sie alle Felder ausfüllen.
Ich habe diese aus einem stackoverflow-Artikel, das kann ich nicht mehr gefunden, das sagte:
Wenn der Benutzer ausgefüllt hat in einem Eingabefeld überprüfen Sie die erste Regel
"id = " $input"
und wenn der Benutzer nicht angegeben die Eingabe überprüfen "id = "" und wenn es
prüft, dass, es wird einfach alles zurück. Da entgeht der leere such-Regel.
Aber wie Sie vielleicht bereits wissen, es funktioniert nicht..
Wie würden Sie mir empfehlen, um diesen Ansatz?
- Warum nicht erstellen eine dynamische Abfrage mit PHP auf Ihre Anforderungen? Zum Beispiel ein Array mit allen filter-Elemente, die bauen Ihre Abfrage vor der Suche?
- verwenden Sie pdo oder mysqli? sollten Sie die Vorbereitung Ihrer Aussagen, so ist dies richtig gehandhabt, ist für Sie...
- Siehe stackoverflow.com/questions/18940229/... und stackoverflow.com/questions/21691675/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, alle die post-vars und die Schleife durch Sie zu sehen, ob Sie gültig sind, und dann bauen Sie Ihre Abfrage
Soetwas umgehen sollten, was Sie brauchen
Beginnen Sie mit einer Zeichenfolge, wie Ihr oben an die WHERE-Anweisung, dann nach, dass Sie eine Schleife durch alle Felder, die der Benutzer suchen möchte, mit, und fügt Sie in ein array, dann die PHP-Funktion "implode" zu kleben, die Felder zusammen mit einer UND-Aussage als "Klebstoff".
Fügen Sie nun auf die geklebte string an die startquery und voila!
Ich würde aber auf Handy atm!
Gebäude der Abfrage dynamisch auf der Grundlage der Antworten ist definitiv ein muss. Aber ein weiteres nettes feature, das Benutzern erlaubt, um Ergebnisse zu finden, basierend auf selbst teilweise Antworten ist die Verwendung einer MySQL-REGEXP query. So zum Beispiel, wenn Sie wollte, um herauszufinden, "maverick" in einem Top-Gun-Datenbank, die eine Abfrage REGEXP = 'mav' | 'rick' zurückkehren würde, Ergebnisse. Das bringt Ihr suchen, viel näher an der Suchmaschinen-Funktionalität, die die Benutzer gewohnt sind.
Hier eine REGEXP-Beispiel, vereinfacht.