J'ai cette requête MySQL.
J'ai des champs de base de données avec ce contenu
sports,shopping,pool,pc,games
shopping,pool,pc,games
sports,pub,swimming, pool, pc, games
Pourquoi cette requête similaire ne fonctionne-t-elle pas? J'ai besoin des terrains avec sports ou pub ou les deux?
SELECT * FROM table WHERE interests LIKE ('%sports%', '%pub%')
Façon plus rapide de faire cela:
est-ce:
Vous avez trouvé cette solution ici: http://forums.mysql.com/read.php?10,392332,392950#msg-392950
En savoir plus sur REGEXP ici: http://www.tutorialspoint.com/mysql/mysql-regexps.htm
la source
(select group_concat(myColumn separator '|') from..)
Pourquoi ne pas essayer REGEXP. Essayez-le comme ceci:
la source
SELECT * FROM table WHERE interests NOT REGEXP 'sports|pub'
(> ‿◠) ✌jazkat
réponse soumise 5 ans avant la vôtre?Vous pouvez également utiliser
RLIKE
.Par exemple:
la source
Votre requête doit être
SELECT * FROM `table` WHERE find_in_set(interests, "sports,pub")>0
Ce que je comprends, c'est que vous stockez les intérêts dans un champ de votre table, ce qui est une idée fausse. Vous devriez définitivement avoir une table «intérêts».
la source
SELECT * FROM table WHERE find_in_set(interests, 'sports,pub')
, mais cette technique est susceptible de surpasser les regex dans la plupart des situations.N'oubliez pas d'utiliser des parenthèses si vous utilisez cette fonction après un
AND
paramètreComme ça:
la source
Ou si vous ne devez faire correspondre que le début des mots:
vous pouvez utiliser les correspondances de caret d'expression régulière:
https://www.regular-expressions.info/anchors.html
la source
Comme @Alexis Dufrenoy l'a proposé, la requête pourrait être:
Plus d'informations dans le manuel .
la source
Plus d'exemples de travail:
La tâche consistait à compter les participants à un ou plusieurs événements avec filtre si l'extension d'e-mail était égale à plusieurs domaines d'entreprise.
la source