Dans les bases de données relationnelles, les colonnes contiennent généralement des valeurs uniques pour chaque ligne. Toutefois, dans certains scénarios, vous devrez peut-être stocker plusieurs valeurs dans une seule colonne, séparées par des délimiteurs tels que des virgules. Cela peut entraîner des difficultés lors de l'interrogation des données, car les opérateurs conventionnels tels que l'opérateur d'égalité ne fonctionnent plus comme prévu.
Par exemple, considérons le tableau suivant, qui stocke les relations parent-enfant :
id name children 1 Roberto Michael,Dia 2 Maria John,Alex 3 Mary Alexandre,Diana
Si nous essayons de trouver le(s) parent(s) ayant un enfant nommé "Alex" en utilisant la requête :
WHERE children = 'Alex'
nous récupérerons aucun résultat, même si Alex est un enfant de Marie. En effet, nous recherchons une correspondance exacte, qui n'est pas présente en raison des multiples valeurs dans la colonne enfants.
Pour gérer de telles situations, nous devons explorer des approches alternatives :
Normaliser le schéma :
La solution idéale est de normaliser le schéma et de créer un tableau séparé pour les enfants, avec une ligne distincte pour chaque enfant et un référence au parent. Cela permettrait une interrogation efficace basée sur les noms d'enfants.
Utilisation de FIND_IN_SET :
Si la normalisation du schéma est impossible, vous pouvez utiliser la fonction FIND_IN_SET, qui vérifie si un la valeur existe dans une liste séparée par des virgules. La requête serait :
WHERE FIND_IN_SET('Alex', children)
Cela renverrait le(s) parent(s) qui ont un enfant nommé Alex. Cependant, il est important de noter que FIND_IN_SET n'est pas l'approche la plus efficace et ne doit être utilisée que si la normalisation n'est pas viable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!