Pergunta

Alguém pode me dar uma consulta que retornará como resultado das linhas ID 1 e 3?

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

Algo como esta seleção * da tabela onde esconde (4)

Foi útil?

Solução

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

documentos para Find_in_set

Outras dicas

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

ou você pode evitar usar assim

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

Isso não terá coisas como 40, 14, etc., mas você precisa garantir que não haja espaços no campo oculto (por exemplo, 1, 4, 5 ou atualize a concat e curta função de acordo.

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

Os % são curingas.

Pesquisa completa de texto Pode ser uma solução razoável para isso, desde que você use as quebras de palavras corretas.

Ou vá com pesquisa completa de texto, conforme sugerido, ou

Gire os valores ocultos em uma tabela separada, com o ID da linha atual.

Por exemplo, Mika teria três entradas nesta tabela

Id = 1, oculto = 1
Id = 1, oculto = 4
Id = 1, oculto = 2

Em seguida, você pode retornar os resultados contra esta tabela de rotação.

Você também pode considerar normalizar a tabela e armazenar esses valores "ocultos" em uma tabela separada com um índice na coluna APPROPROT. Dependendo do número de linhas que você tem, seria muito mais rápido:

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

e:

SELECT DISTINCT table.* FROM table, hidden_table WHERE table.ID = hidden_table.ID AND hidden_table.hidden = 4
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top