Maison >développement back-end >tutoriel php >Comment puis-je rechercher efficacement des enregistrements comportant plusieurs valeurs dans une seule colonne de base de données ?
Recherche d'enregistrements avec plusieurs valeurs dans une colonne
Dans une base de données relationnelle, il est courant de stocker plusieurs valeurs dans une seule colonne. Cependant, lors de l’interrogation de données avec de telles colonnes, il peut s’avérer difficile d’isoler des valeurs spécifiques. Explorons un scénario dans lequel nous avons un tableau avec une colonne « enfants » contenant plusieurs noms séparés par des virgules.
Problème :
Considérez le tableau suivant :
id | name | children |
---|---|---|
1 | Roberto | Michael,Dia |
2 | Maria | John,Alex |
3 | Mary | Alexandre,Diana |
L'objectif est de retrouver le parent qui a un enfant prénommé Alex. Bien que l'utilisation de "WHERE children = 'Alex'" soit idéale, elle échoue en raison des multiples noms dans chaque cellule. L'utilisation de "WHERE children LIKE '%Alex%'" renvoie des correspondances supplémentaires sans rapport.
Schéma normalisé :
Pour résoudre ce problème, le schéma de la table peut être normalisé en créant un tableau séparé pour les enfants avec une rangée pour chaque enfant. La table d'origine peut ensuite être jointe à la table enfant pour localiser le parent avec un enfant spécifique. Cependant, si cette solution n'est pas réalisable, il existe une alternative :
Fonction FIND_IN_SET :
La fonction MySQL FIND_IN_SET() peut être utilisée pour vérifier si une valeur spécifique est présent dans une liste délimitée par des virgules. Pour ce scénario, la requête serait :
WHERE FIND_IN_SET('Alex', children)
Cette requête renverra les lignes où « Alex » se trouve dans la colonne « enfants ».
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!