Ich habe eine ähnliche Anfrage für ein Suchformular wie folgt ausgewählt:
%Vor%Mein Problem ist, dass, wenn jemand zum Beispiel nach "Apfel und Birne" sucht, ich keine Ergebnisse bekomme, die irgendwelche der Wörter enthalten, ich kann nur Ergebnisse (gut 1 Ergebnis) mit allen Wörtern darin zurückgeben.
Kann mir jemand helfen, diese Suche ein bisschen mehr zu machen ?? Danke im Voraus.
Sie möchten also eine UND-Suche mit jedem der eingegebenen Wörter und nicht mit der exakten Zeichenfolge? Wie geht es in etwa so:
%Vor%Dies wird Ihnen eine Abfrage wie:
geben %Vor%Ändern Sie das AND in ein OR, wenn Sie einen beliebigen Suchbegriff und nicht alle vergleichen möchten. Weitere Verbesserungen könnten die Definition einiger Stoppwörter wie "und" beinhalten, um bessere Ergebnisse zu erzielen.
Ich denke, dass die beste Lösung wäre, reguläre Ausdrücke zu verwenden. Es ist am saubersten und wahrscheinlich am effektivsten. Reguläre Ausdrücke werden in allen gängigen DB-Engines unterstützt.
In MySQL gibt es RLIKE
operator, so dass Ihre Abfrage etwa so aussehen würde:
Habe es nicht getestet, hoffe, dass mein Ausdruck für MySQL Regexp "Dialekt" richtig ist.
Mehr zu MySql regexp support:
Ссылка
Für Ihren einfachen Fall hier könnten Sie Ihr "und" durch ein "%" ersetzen (aber ich schätze, Sie suchen nach einer umfassenderen Antwort. (Dies wäre auch auftragsspezifisch, wie Apple müsste) komm vor Birne.)
Äh. Nicht die beste Lösung, die ich denke, aber Sie können die Wörter in ein Array aufteilen und sie in mehrere LIKES loopen. Ersetze einige, um ANDs, ORs usw. zu entfernen und führe dann eine Explode aus.
Dann einfach loop.
$ sql = SELECT * aus Buckets wo ";
Schleife das Array, $ sql.="Bucketname LIKE '%". $ arrayEl [i]. "% OR". Stellen Sie nur sicher, dass bei der letzten Iteration das letzte OR nicht eingeschlossen wird, oder fügen Sie eine letzte Zeile von 0 = 1 usw. an.
Nicht elegant, nicht effizient, aber in diesem Fall wird es funktionieren. Sie sollten wirklich eine Volltextsuche ausführen, wenn es ein Textfeld ist.
Ich wollte etwas mit grundlegendem SQL für meine Mehrwortsuche in der MySQL-Datenbank. So komme ich auf Folgendes.
%Vor% Sie können "Apfel und Birne" in 2 Stränge aufteilen; "Apfel" und "Birne". Vielleicht, dann kannst du WHERE bucketname LIKE '%apple%' OR bucketname LIKE '%pear%'
machen. Ich weiß nicht, ob das hilft.