Pregunta

Me gustaría ejecutar algo como:

select * from table where field in ("%apple%", "%orange%")

¿Hay alguna manera? O al menos hay una mejor manera que generar consultas dinámicamente para cada palabra clave:

select * from table where field like "%apple%" or field like "%orange%"

Gracias.

¿Fue útil?

Solución

No estoy seguro de que sea mejor de lo que se te ocurrió, pero puedes usar Capacidades de expresión regular de MySQL :

select * from my_table where field rlike 'apple|orange';

Además, como otros han mencionado, puede usar MySQL's full capacidades de búsqueda de texto (pero solo si está utilizando el motor MyISAM).

Otros consejos

Probablemente debería mirar indexación de texto completo de MySQL , si eso es lo que estás tratando de hacer.

Quizás una solución mejor sería utilizar una búsqueda booleana contra un índice de texto completo ?

EDITAR: lo busqué y solo admite comodines al final de las palabras:

ALTER TABLE table ADD FULLTEXT INDEX (field);

SELECT * FROM table WHERE MATCH (field)
AGAINST ('orange* apple*' IN BOOLEAN MODE);

En Oracle, puede hacer:

select * from table where
regexp_like (column, 'apple|orange', 'i')

Puede usar expresiones regulares más complejas. La 'i' lo hace insensible. Consulte documentos de Oracle

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top