2016-07-11 3 views
0

Gibt es etwas in MySQL wird erlauben, nach Satz ohne Rücksicht auf die Reihenfolge der Wörter zu suchen, zB: Suche nach Europe league passen league Europe, same mit sätzen enthalten 3 worte ... etcMySQL: Suche nach einem Satz und ignoriere die Reihenfolge der Wörter

ich weiß, dass ich dies in Programmiersprache umgehen kann und erzeugen MySQL-Abfrage wie folgt aus:

select p.title 
from post p 
where p.title = 'Europe league' or p.title = 'league Europe' 
order by case 
    when text = 'Europe league' then 1 
    when text = 'league Europe' then 2 
end 
limit 10; 

Aber gibt es eine Selbst Griff in MySQL für dieses Problem? thx

Antwort

4

Sie suchen nach Volltextsuche. Lesen Sie auf the docs, so dass Sie die folgende Art der Abfrage verwenden können:

SELECT p.title 
FROM post p 
WHERE MATCH (p.title) AGAINST ("+europe +league" IN BOOLEAN MODE) 
LIMIT 10 
+0

Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, um die richtige Syntax für den 'IN BOOLEAN MODE' zu verwenden. @Jethro – mwafi

+0

Entschuldigung, der Tippfehler wurde korrigiert. Entfernen Sie das Komma vor dem IN BOOLEAN MODE. – 1sloc

+0

Es scheint, dass es MyISAM mit Volltextindizierung-Unterstützung benötigt: (FULLTEXT-Index kann nicht gefunden werden, der der Spaltenliste entspricht) – mwafi

-1

Offensichtlich ist die Anzahl der Iterationen untragbar, wie Sie mehr Wörter hinzufügen; Eine Lösung wäre die Verwendung der Instr-Funktion(). Auf diese Weise können Sie beispielsweise Folgendes tun:

select p.title 
from post p 
where instr('Europe',p.title)>0 
AND instr('League ',p.title)>0 
AND instr('Match',p.title)>0 
limit 10; 
+0

Das ist nicht wirklich eine skalierbare Lösung, oder? – 1sloc

Verwandte Themen