PHP SQL SELECT ist ein Suchelement mit mehreren Wörtern

7

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.

    
Dan 01.09.2010, 19:09
quelle

6 Antworten

30

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.

    
Tim Fountain 01.09.2010, 19:17
quelle
7

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:

%Vor%

Habe es nicht getestet, hoffe, dass mein Ausdruck für MySQL Regexp "Dialekt" richtig ist.

Mehr zu MySql regexp support:
Ссылка

    
Ondrej Bozek 07.12.2012 12:38
quelle
1

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.)

    
MikeTheReader 01.09.2010 19:14
quelle
1

Ä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.

    
CogitoErgoSum 01.09.2010 19:18
quelle
1

Ich wollte etwas mit grundlegendem SQL für meine Mehrwortsuche in der MySQL-Datenbank. So komme ich auf Folgendes.

%Vor%     
Sukanya Sen 29.04.2017 00:04
quelle
0

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.

    
Rocket Hazmat 01.09.2010 19:14
quelle

Tags und Links