Question

Quelqu'un peut-il me donner une requête qui retournera en raison des lignes ID 1 et 3?

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

Quelque chose comme ça SELECT * FROM table WHERE Cachée AYANT (4)

Était-ce utile?

La solution

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

docs pour FIND_IN_SET

Autres conseils

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

ou vous pouvez éviter d'utiliser comme comme cela

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

ce ne sera pas les choses comme 40, 14, etc, mais vous devez vous assurer qu'il n'y a pas d'espace dans le champ caché (par exemple, 1, 4, 5 ou mettre à jour la concat et fonctionnent comme conséquence.

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

% sont des jokers.

recherche en texte intégral pourrait être raisonnable solution pour cela aussi longtemps que vous utilisez les coupures de mots corrects.

Soit aller avec Full Text Search, comme l'a suggéré, ou

Faites tourner les valeurs masquées au loin dans une table séparée, avec l'ID de la ligne courante.

Par exemple, Mika aurait trois entrées dans ce tableau

ID = 1, Cachée = 1
ID = 1, Hidden = 4
ID = 1, Hidden = 2

Ensuite, vous pouvez retourner des résultats contre ce spin-off table.

Vous pouvez également envisager la normalisation de la table et le stockage de ces valeurs « cachées » dans une table séparée avec un index sur la colonne winrar. En fonction du nombre de lignes que vous avez ce serait beaucoup plus rapide:

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

et

SELECT DISTINCT table.* FROM table, hidden_table WHERE table.ID = hidden_table.ID AND hidden_table.hidden = 4
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top