En MySQL ou en typo3 plus particulièrement, on retrouve souvent des champs de tables MySQL qui contiennent des valeurs séparées par des virgules.
Par exemple, dans la table « fe_users », on décrit les groupes d’un utilisateur en listant les IDs des groupes. On peut alors avoir des valeurs du style « 3,39,189″. Comment savoir si cet utilisateur fait partie du groupe d’ID 189 ? Il y a en gros 3 manières distincte de fonctionner :

  • Utiliser une expression régulière avec un WHERE usergroup REGEXP ‘,?xx,?’. Une solution assez médiocre ou alors il faut se munir d’un pattern qui couvre tous les cas possibles.
  • Utiliser un IN comme cela : SELECT * FROM fe_users WHERE usergroup IN (189). Cela peut être une solution envisageable mais parfois on a un comportement bizarre. Voir ce billet pour une démonstration.
  • Utiliser une la fonction MySQL FIND_IN_SET qui répond à notre problématique et qui est de plus optimisée pour cela. Elle s’utilise de la manière suivante : SELECT * FROM fe_users WHERE FIND_IN_SET(’189′,usergeoup)

Partager :


Article(s) sur le même sujet :

  1. Caster un type BLOB ou autre en CHAR
  2. Rechercher/Remplacer en MySQL et LINUX
  3. Repérer les doublons dans une table