mysql multiple O NO ME GUSTA

Tengo un complemento de wordpress que esencialmente crea una consulta mysql y devuelve los resultados a wordpress.

Está dirigido por el usuario y, por lo tanto, puede terminar en consultas grandes con múltiples NO ME GUSTA, lo que da como resultado una consulta muy lenta.

Cualquier sugerencia que podría utilizar para mejorar:

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

El cliente está agregando muchas palabras clave negativas al complemento de wordpress, lo que da como resultado consultas más grandes que la anterior.

preguntado el 10 de marzo de 12 a las 12:03

2 Respuestas

Esto se hace más fácilmente con REGEXP. Para varias palabras, use un grupo como (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

respondido 10 mar '12, 12:03

excelente, lo probaré, ¿crees que eso mejorará la velocidad de consulta? - bertster

@ user1237700 Probablemente lo acelerará un poco, la única forma de saberlo es probarlo y compararlo. - Michael Berkowski

Puedes utilizar una REGEXP operación para comparar todos los patrones a la vez.

Tu consulta será algo como:

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

respondido 10 mar '12, 12:03

Gracias Pablo, ¿cómo haría eso con varias palabras, por favor? - bertster

Eso es todo lo que necesitas para todas tus palabras. Prueba la consulta. La expresión regular coincidirá word, word1, word2, word3, word4, word5, word6, word7, word8 y word9. - Pablo santa cruz

¡lo siento! word & word1 & word2 no son realmente así, pueden ser cualquier cosa que ingrese el usuario. Creo que Michael lo ha explicado arriba de word1 | palabra2 | etc con | separador - bertster

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.