Pregunta

Puede alguien darme una consulta que devolverá como un ID de filas de resultados 1 y 3?

ID Name Hidden 
1 Mika 1,4,2 
2 Loca 0 
3 Nosta 4 
4 Like 2 

Algo como esto * SELECT FROM tabla WHERE Oculto HAVING (4)

¿Fue útil?

Solución

SELECT * FROM table WHERE FIND_IN_SET('4',Hidden);

FIND_IN_SET

Otros consejos

SELECT * FROM table WHERE CONCAT(',',Hidden,',') LIKE '%,4,%'

o se puede evitar el uso como como este

SELECT * FROM table WHERE INSTR(CONCAT(',',Hidden,','), ',4,') > 0

esto no va a hacer las cosas como 40, 14, etc, pero hay que asegurarse de que no hay espacios en el campo oculto (por ejemplo, 1, 4, 5 o actualizar el concat y funcionan como consecuencia.

SELECT * FROM table WHERE Hidden LIKE '%4%'

el% son comodines.

buscar con texto completo podría haber una razonable solución para esto, siempre y cuando se utilizan las separaciones de palabras correctas.

O ir con búsqueda de texto completo, como se sugiere, o

girar los valores ocultos apagado en una tabla separada, con el ID de la fila actual.

Por ejemplo, Mika tendría tres entradas en esta tabla

ID = 1, Hidden = 1
ID = 1, Hidden = 4
ID = 1, Hidden = 2

A continuación, podría devolver resultados en contra de este spin off mesa.

También puede que desee considerar la normalización de la mesa y el almacenamiento de estos valores "ocultos" en una mesa separada con un índice en la columna adecuada exploración. Dependiendo del número de filas que tiene eso sería mucho más rápido:

ID Hidden
1  1
1  4
1  2 
3  4 
4  2 

y

SELECT DISTINCT table.* FROM table, hidden_table WHERE table.ID = hidden_table.ID AND hidden_table.hidden = 4
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top