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)
Solución
SELECT * FROM table WHERE FIND_IN_SET('4',Hidden);
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