Maison >base de données >tutoriel mysql >Comment sélectionner des données de boissons uniques à partir de plusieurs tables MySQL avec des photos en double ?

Comment sélectionner des données de boissons uniques à partir de plusieurs tables MySQL avec des photos en double ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-17 12:47:24283parcourir

How to Select Unique Drink Data from Multiple MySQL Tables with Duplicate Photos?

Sélection de résultats uniques à partir de plusieurs tables dans MySQL

Dans MySQL, lors de l'exécution d'une opération JOIN entre plusieurs tables, il est possible de rencontrer des lignes en double dans l'ensemble de résultats. Cela se produit souvent lors de la sélection de données dans une table comportant plusieurs lignes liées à une seule entrée dans une autre table.

Énoncé du problème

Considérez l'exemple suivant :

SELECT name, price, photo
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id;

Cette requête tente de récupérer le nom, le prix et la photo de chaque boisson à partir des tables boissons et boissons_photos. Cependant, cela génère des lignes en double pour chaque boisson car il peut y avoir plusieurs photos associées à une seule boisson.

Solution

Pour éliminer les doublons et garantir que chaque boisson apparaît uniquement une fois, nous devons incorporer un mécanisme de regroupement. MySQL propose plusieurs façons d'y parvenir :

Utilisation du regroupement et de l'agrégation

Une option consiste à utiliser la clause GROUP BY pour regrouper les résultats en fonction des boissons uniques et à appliquer une fonction d'agrégation pour sélectionner les valeurs de colonne souhaitées :

SELECT name, price, photo
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id
GROUP BY drinks_id;

Dans cette requête, boissons_id agit comme colonne de regroupement, garantissant que seules les boissons distinctes sont incluses dans les résultats. De plus, comme il y a plusieurs photos pour chaque boisson, nous devons spécifier quelle photo afficher. Dans cet exemple, photo est utilisé, mais il peut être remplacé par MIN(photo) ou MAX(photo) pour récupérer respectivement la première ou la dernière photo par ordre croissant ou décroissant.

Utilisation de GROUP_CONCAT

Alternativement, MySQL fournit la fonction GROUP_CONCAT, qui peut être utilisée pour concaténer plusieurs valeurs en une seule. string :

SELECT name, price, GROUP_CONCAT(photo)
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id
GROUP BY drinks_id;

Cette requête récupérera le nom, le prix et une liste séparée par des virgules de toutes les photos associées à chaque boisson.

Remarque :

Il est important de noter que l'utilisation de GROUP_CONCAT peut entraîner une surcharge de performances si les valeurs concaténées sont grandes. De plus, faites attention aux caractères séparateurs qui pourraient être présents dans les valeurs elles-mêmes.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn