2012-02-01 18 views

Respuesta

71

Bueno, si usted conoce el orden de las palabras .. puede utilizar:

SELECT `name` FROM `table` WHERE `name` REGEXP 'Stylus.+2100' 

También se puede usar:

SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus%' AND `name` LIKE '%2100%' 
+0

Gracias, de esta manera no obtendré 'HP Laserjet 2100'. Lo siento si mi ejemplo no fue el mejor. –

+1

Una de las respuestas a la respuesta aquí comparó el rendimiento de LIKE/REGEX y encontró que LIKE se desempeñó mejor, FYI: http://stackoverflow.com/questions/1127088/mysql-like-in – Amalgovinus

+0

@Amalgovinus gracias por el enlace, I wouldn Lo pensé ... Es bueno saber :) – SERPRO

17

Usted puede simplemente reemplazar cada espacio con %

SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus%2100%' 
+0

Gracias pero de esta manera no me gustaría obtener si busqué 'Photo Stylus 2100' –

+0

¡jaja! está bien, ese requisito no se especificó en la pregunta "¿Cómo puedo seleccionar el registro buscando 'Stylus 2100'?" –

+0

¡tienes razón! Mi culpa, lo siento! Gracias de todos modos –

26

Creo que la mejor solución sería el uso de expresiones regulares. Es más limpio y probablemente el más efectivo. Las expresiones regulares son compatibles con todos los motores de DB comúnmente utilizados.

en MySQL no es RLIKE operador para que su consulta sería algo así como:
SELECT * FROM buckets WHERE bucketname RLIKE 'Stylus|2100'
no soy muy fuerte en la expresión regular así que espero que la expresión está bien.

Editar
la expresión regular debería ser más bien:

SELECT * FROM buckets WHERE bucketname RLIKE '(?=.*Stylus)(?=.*2100)' 

Más sobre MySql soporte de expresiones regulares:
http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp

+0

Esta expresión regular hace algo diferente: obtiene cualquier cosa que contenga _either_ 'Stylus' o '2100', no necesariamente ambos. –

+0

He mejorado mi RegExp –

+1

Estaba buscando una solución exclusiva para expresiones regulares y este truco lo hizo ^^, – velop

1

La solución correcta es una Búsqueda de texto (si es que se puede utilizar) https://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

Esto casi hace lo que quiere:

SELECT * FROM buckets WHERE bucketname RLIKE '(Stylus|2100)+.*(Stylus|2100)+'; 

SELECT * FROM buckets WHERE bucketname RLIKE '(Stylus|2100|photo)+.*(Stylus|2100|photo)+.*(Stylus|2100|photo)+.*'; 

Pero esto también coincidirá con "210021002100", que no es muy bueno.

Cuestiones relacionadas