2012-03-10 104 views
3

我有一個wordpress插件,實質上創建一個mysql查詢並將結果返回給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 

的客戶增添了不少負面關鍵字到WordPress插件導致比上面的一個較大的疑問。

回答

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 2012-03-10 12:38:21

+0

@ user1237700它可能會加快一點,只有知道的方法是測試它並對其進行基準測試。 – 2012-03-10 12:39:30

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 2012-03-10 12:35:51

+0

這就是你所需要的一切。嘗試查詢。正則表達式將匹配「word」,「word1」,「word2」,「word3」,「word4」,「word5」,「word6」,「word7」,「word8」和「word9」 – 2012-03-10 12:41:21

+0

對不起! word&word1&word2實際上並不像它們可以是用戶輸入的任何內容。我認爲邁克爾在word1 |上面解釋了它word2 |等等|分隔符 – bertster 2012-03-10 12:45:19