Dans MariaDB, nous pouvons utiliser le GROUP_CONCAT()
fonction pour renvoyer nos résultats de requête sous forme de liste séparée par des virgules. J'entends par là, pour une colonne donnée, nous pouvons convertir toutes les lignes en une seule ligne contenant une liste séparée par des virgules des valeurs qui composent cette colonne. Chaque ligne est un élément distinct dans la liste.
Exemple
Supposons que nous lancions la requête suivante :
SELECT meal
FROM guest_meals;
Résultat :
+---------+ | meal | +---------+ | Salad | | Fish | | Burrito | | Pasta | | Salad | | Salad | +---------+ 6 rows in set (0.001 sec)
Cette requête a généré six lignes.
Nous pouvons convertir ces lignes en une ligne séparée par des virgules comme ceci :
SELECT GROUP_CONCAT(meal)
FROM guest_meals;
Résultat :
+--------------------------------------+ | GROUP_CONCAT(meal) | +--------------------------------------+ | Salad,Fish,Burrito,Pasta,Salad,Salad | +--------------------------------------+ 1 row in set (0.003 sec)
Modifier le délimiteur
Nous pouvons spécifier notre propre séparateur en le passant à la fonction, préfixé par le SEPARATOR
mot-clé :
SELECT GROUP_CONCAT(meal SEPARATOR ' + ')
FROM guest_meals;
Résultat :
Salad + Fish + Burrito + Pasta + Salad + Salad
Ordre des résultats
Nous pouvons ordonner les résultats en utilisant un ORDER BY
clause dans la fonction :
SELECT GROUP_CONCAT(meal ORDER BY meal ASC)
FROM guest_meals;
Résultat :
Burrito,Fish,Pasta,Salad,Salad,Salad
Renvoyer uniquement les valeurs uniques
Nous pouvons utiliser un DISTINCT
clause pour ne renvoyer que des valeurs uniques :
SELECT GROUP_CONCAT(DISTINCT meal ORDER BY meal ASC)
FROM guest_meals;
Résultat :
Burrito,Fish,Pasta,Salad
Limiter les résultats
Nous pouvons utiliser un LIMIT
clause pour limiter le nombre d'éléments dans la liste :
SELECT GROUP_CONCAT(DISTINCT meal ORDER BY meal ASC LIMIT 3)
FROM guest_meals;
Résultat :
Burrito,Fish,Pasta
Requêtes groupées
Le GROUP_CONCAT()
La fonction peut être pratique lors de l'exécution de requêtes groupées. Voir MariaDB GROUP_CONCAT()
pour un exemple.