MySQL & PHP : Mehrere Keyword-Suche
Ich habe einen string mit durch Komma getrennte Schlüsselwörter. Zum Beispiel:
$keywords = 'keyword1, keyword2, keyword3';
Meinem Tisch-schema, benannt tbl_address
ist wie folgt ( vereinfacht ) :
id INT(11) PRIMARY KEY, AUTO INCREMENT
address VARCHAR(250) NOT NULL
Übernehmen, ich habe mit MySQLi
in PHP ( nicht PDO
).
Hier ist mein Aktueller Ansatz:
$result = array();
$keyword_tokens = explode(',', $keywords);
foreach($keyword_tokens as $keyword) {
$keyword = mysqli_real_escape_string(trim($keyword));
$sql = "SELECT * FROM tbl_address WHERE address LIKE'%$keyword%'";
//query and collect the result to $result
//before inserting to $result, check if the id exists in $result.
//if yes, skip.
}
return $result;
Dieser Ansatz funktioniert, ist aber ineffizient in der Leistung. Wenn es gibt eine Menge von Schlüsselwörtern, wird eine Menge Abfragen.
Meine Frage ist, gibt es einen besseren Weg, um das gleiche Ziel erreichen ? also, was ist der einfachste Weg, um alle Datensätze zurück, die mit der Adresse, mit der die keywords ?
Das kann dir helfen: stackoverflow.com/a/9736386/1983854
Die Kombination von "WIE" und "IN": stackoverflow.com/questions/1865353/...
Im ernst, warum hast du nicht meine REGEXP-one-liner?
Wenn das Schlüsselwort enthält den regulären Ausdruck keywords, die Abfrage schlägt fehl, oder erzeugen unerwartete Ergebnis, z.B. keyword =
Natürlich können Sie tun, das ist deine Frage 😉
Die Kombination von "WIE" und "IN": stackoverflow.com/questions/1865353/...
Im ernst, warum hast du nicht meine REGEXP-one-liner?
Wenn das Schlüsselwort enthält den regulären Ausdruck keywords, die Abfrage schlägt fehl, oder erzeugen unerwartete Ergebnis, z.B. keyword =
'|=|=|'
Natürlich können Sie tun, das ist deine Frage 😉
InformationsquelleAutor Raptor | 2013-04-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem einfachen
REGEXP
könnte das sein, was Sie suchen. Sie müssten zu überprüfen, wie effizient es ist, für sich selbst.SELECT * FROM tbl_address WHERE field REGEXP 'keyword1|keyword2|keyword3';
MySQL
string-Funktion!Ausgezeichnete Antwort, dies hat mir geholfen zu lösen ein Wochen im Wert von Forschung und halfen mir beim Sprung über die 30% mein Problem 🙂
InformationsquelleAutor Jimbo
InformationsquelleAutor Strawberry
Müssen Sie nur ein 'ODER', sonst nichts...
edit: Nur um sicherzugehen, dass Sie auch schneiden Sie die keywords
Außerdem sollten Sie auch an die db-Ressource link, um die
mysqli_real_escape_string()
Funktion...$sql
obwohl.Du hast Recht. Ja jetzt auch Hinzugefügt 🙂
Das wird nicht funktionieren; es sagt, dass ich sql-Fehler;
InformationsquelleAutor arraintxo
Der beste Weg ist, verwenden Sie die Volltextsuche.
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
wenn Sie nicht möchten, zu verwenden Volltext können Sie verwenden ODER Sie in Ihren WHERE-Bedingung
InformationsquelleAutor Robert
Versuchen, WO IN der Klausel:
Erfolgreich getestet auf MySQL 5.1.
InformationsquelleAutor B.F.
Stellen Sie eine einzige Abfrage
$other .="
statt$other ="
innerhalb der Schleife? Andernfalls bist du die Aufhebung deror
Klausel in jeder Schleife.InformationsquelleAutor Vaishu
Beste Weg ist, einfach erstellen Sie such-string WHERE-Klausel und hängen Sie auf Abfrage, und führen Sie es einmal.
InformationsquelleAutor mukund
Hi erstellen Sie eine Abfrage mit union und führen am Ende der Schleife
Ausführen der Abfrage hier.
InformationsquelleAutor Codesen