2012-03-10 42 views
3

私は本質的にmysqlクエリを作成し、結果をwordpressに返すwordpressプラグインを持っています。mysql複数または不一致

これはユーザー主導のため、多数のNOT LIKEを含む大規模なクエリになり、クエリが非常に遅くなる可能性があります。

私は改善するために使用できる任意の提案:

SELECT field1,field2,field3,field4 
from datatable 
WHERE (title NOT LIKE '%word%' AND title NOT LIKE '%word2%' 
AND title NOT LIKE '%word3%' AND title NOT LIKE '%word4%' 
AND title NOT LIKE '%word5%' AND title NOT LIKE '%word6%' 
AND title NOT LIKE '%word7%' AND title NOT LIKE '%word8%' 
AND title NOT LIKE '%word9%') 
AND MATCH (title) AGAINST ("\"brandname\" " IN BOOLEAN MODE) 
ORDER BY total ASC LIMIT 0,60 

顧客は上記のものよりも大きなクエリにつながるワードプレスのプラグインに除外キーワードの多くを追加しています。

答えて

4

これが最も簡単REGEXPで行われます。

あなたのクエリは次のようになります。複数の単語の場合は、(one|two|three)

SELECT 
    field1, 
    field2, 
    field3, 
    field4 
from datatable 
WHERE 
    title NOT REGEXP '(word1|word2|word3|word4|word5...|word9)' 
    AND MATCH (title) AGAINST ("\"brandname\" " IN BOOLEAN MODE) 
ORDER BY total ASC 
LIMIT 0,60 
+0

優れている、私はそれを試してみましょう、それはクエリの速度が向上すると思いますか? – bertster

+0

@ user1237700それはおそらくそれをテストし、それをベンチマークすることです知っている唯一の方法は、少し高速化されます。 –

1

REGEXP操作を使用すると、すべてのパターンを一度に比較できます。

SELECT field1,field2,field3,field4 
    FROM data table 
WHERE title NOT REGEXP '^word[0-9]?$' 
    AND MATCH(title) ("\"brandname\" " IN BOOLEAN MODE) 
ORDER BY total ASC LIMIT 0,60 
+0

おかげパブロのようなグループを使用して、どのように私は複数の単語でくださいということだろうか? – bertster

+0

あなたのすべての言葉に必要なのはそれだけです。クエリを試してみてください。正規表現は 'word'、' word1'、 'word2'、' word3'、 'word4'、' word5'、 'word6'、' word7'、 'word8'、' word9'にマッチします。 –

+0

申し訳ありませんword&word1&word2は実際にはユーザーが入力できるものではありません。私はマイケルがword1の上にそれを説明したと思うワード2 | |とseperator – bertster