2009-08-27 17 views
5

Bueno, yo les he un valor Quiero comprobar si hay coincidencias potenciales en una base de datos (en un campo varchar) así que escribir algo como:pregunta MySQL sobre "le gusta inversas"

SELECT * FROM table WHERE column LIKE "%value%" 

que funcionará si el valor es algo así como "prueba" y la columna tiene un valor de "esto es una prueba" sin embargo, si se invierte entonces no voy a conseguir un partido he intentado cosas a lo largo de las líneas de:

SELECT * FROM table WHERE CONCAT("%",column,"%") LIKE "value" 

pero don No sé exactamente cómo expresar esto en Google para obtener una respuesta que necesito, ¡por favor ayuda!

+1

¿Por qué quieres hacer esto? –

+0

parece que tiene un conjunto de columnas con algo similar en el nombre de la columna, y quiere ver si su 'valor' está contenido en alguno de estos ... – Irfy

+0

No tengo libertad para decirlo. –

Respuesta

11

Puede revertir una declaración like. Sólo usando la misma sintaxis que una like consulta periódica:

select 
    * 
from 
    table 
where 
    'value' like concat('%', column, '%') 

Por supuesto, si se sentía salvaje y loco, también se puede utilizar instr:

select * from table where instr('value', column) > 0 

No sé cuál es más rápido , ya que no tengo una instancia de MySQL para probar, pero vale la pena intentar tanto para ver qué gana.

+0

+1 para la primera respuesta. Esto luce bien. –

+0

muy genial, ¡no tenía idea de que esto fuera posible! – Irfy

+1

Utilizará un índice, si existe para la columna, para convertir los datos, no para buscar. Es más rápido usar una vista en línea para agregar lo que desea a la columna, y LUEGO comparar. Si solo quiere filas donde ocurre la palabra, sería mejor que use INSTR. –

3
SELECT * 
FROM table 
WHERE 'value' LIKE CONCAT('%', column, '%')