2017-11-20 3 views
1
だからここ
SELECT *, 
MATCH (`text`) AGAINST ('my work involves for' IN BOOLEAN MODE) `score` 
FROM `messages` WHERE MATCH (`must_match`) AGAINST ('my work involves for' IN BOOLEAN MODE) 
ORDER BY `score` DESC 

ユーザ入力が、私はmus_match列のすべての単語は、上記から、したがって、ユーザー入力 に一致した場合に発生します今

id text     must_match 
--- ----     ------ 
1 my work is to help work,help 
2 work involves help involves,work 

「私の仕事は、のために必要」でのmysql戦ですべての単語と一致する必要があります私たちの結果は、多くの時間を費やした後

must_match列はテキスト列

+0

'must_match'は常に2つのカンマ区切りの値を持っていますか? –

+0

いいえ、それは2以上になる可能性があります –

答えて

0

から言葉が含まれています2行目になります行、私は解決策/回避策を思い付くことができませんあなたの仕事のために。この主な理由は、というのの多値属性を持つことです。カンマで区切られた値が含まれており、値の数もあらかじめ定義されていません。

まず、区切られたリストを列に格納するという短所を実現するために、this linkまでお越しくださいますようお願いいたします。今

id  text1   must_match 
1 my work is to help work 
1 my work is to help help 
2 work involves help involves 
2 work involves help work 

、あなたが解決のために読み続けるとされていない場合、その背後にある理由をコメントしてください1NFであなたのテーブルを変換すると、(上記のように)複数の行でmust_matchの複数の値を保存することができます。

ソリューション:

select id,text1, 
MATCH (text1) AGAINST ('my work involves for' IN BOOLEAN MODE) as score 
from t t1 
where locate(must_match,"my work involves for") > 0 
group by id 
having count(*) = (select count(*) from t where id = t1.id); 

注:idの場合は、することができますgroup byすぎtext列を使用して、プライマリキーです。

Click here for Demo

それが役に立てば幸い!

+0

答えを試しましたか? –

+0

手頃な価格のアプローチですか? –