MySQL несколько или не нравится - PullRequest
3 голосов
/ 10 марта 2012

У меня есть плагин WordPress, который по сути создает запрос MySQL и возвращает результаты WordPress.

Это управляемый пользователем, и поэтому может в конечном итоге в больших запросах с несколькими 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, что приводит к большим запросам, чем приведенный выше.

Ответы [ 2 ]

5 голосов
/ 10 марта 2012

Это проще всего сделать с 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
1 голос
/ 10 марта 2012

Вы можете использовать операцию 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...