Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment rechercher une valeur séparée par des virgules

Solution à court terme

Utilisez la fonction FIND_IN_SET :

WHERE FIND_IN_SET('Queensland', csv_column)

... parce que l'utilisation de LIKE avec des caractères génériques à chaque extrémité est risquée, en fonction du nombre/peu de correspondances (et cela garantit également une analyse de table). Les performances de LIKE avec des caractères génériques de chaque côté sont comparables à celles de REGEXP, ce qui signifie mauvais.

Solution à long terme

Ne stockez pas de valeurs séparées par des virgules :utilisez une relation plusieurs-à-plusieurs appropriée, impliquant trois tables :

Choses

  • thing_id (clé primaire)

États australiens

  • State_id (clé primaire)
  • State_name

Things_to_Auz_States

  • thing_id (clé primaire, clé étrangère vers THINGS tableau)
  • State_id (clé primaire, clé étrangère vers AUSTRALIAN_STATES tableau)

Vous aurez besoin de JOIN pour extraire des données des trois tables, mais si vous voulez savoir des choses comme combien sont associées à un état particulier, ou à deux états particuliers, c'est le bon modèle.