2016-07-11 8 views
0

MySQLで文章の順序を気にせずに文章を検索できるようにするには、先に:Europe leagueを検索してください。league EuropeMySQL:文を検索して単語の順序を無視する

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; 

しかし、この問題のためにMySQLで自己のハンドルがあります:など

私はプログラミング言語でこれを処理し、このようなMySQLのクエリを生成することができます知っていますか? thx

答えて

4

あなたは全文検索を探しています。あなたは、クエリの次の種類を使用することができますので、the docs上に読む:

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

SQL構文に誤りがあります。あなたのMySQLサーバーのバージョンに対応するマニュアルをチェックしてください。右の構文は「BOOLEAN MODE」の近くで使用してください)@Jethro – mwafi

+0

申し訳ありませんが、誤植が修正されました。 IN BOOLEAN MODEの前にカンマを削除します。 – 1sloc

+0

フルテキストインデックス作成機能を備えたMyISAMが必要になると思われます。(列リストに一致するFULLTEXTインデックスが見つかりません) – mwafi

-1

明らかに反復回数は、あなたがより多くの単語を追加すると法外になり、これに対する1つの解決策は、instr関数(http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_instr)を使用することです。そうすれば、次のような行為をすることができます:

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

これは本当にスケーラブルな解決策ではありませんか? – 1sloc

関連する問題