Syntaxe alternative pour concaténer plusieurs lignes individuelles
AVERTISSEMENT: ce message vous donnera faim.
Donné:
Je me suis retrouvé à vouloir sélectionner plusieurs lignes individuelles - au lieu d'un groupe - et à concaténer sur un certain champ.
Supposons que vous ayez un tableau des identifiants des produits et leurs noms et prix:
+------------+--------------------+-------+
| product_id | name | price |
+------------+--------------------+-------+
| 13 | Double Double | 5 |
| 14 | Neapolitan Shake | 2 |
| 15 | Animal Style Fries | 3 |
| 16 | Root Beer | 2 |
| 17 | Lame T-Shirt | 15 |
+------------+--------------------+-------+
Ensuite, vous avez un ajax fantaisie-schmancy qui répertorie ces chiots comme des cases à cocher.
Votre utilisateur hippopotame affamé sélectionne 13, 15, 16
. Pas de dessert pour elle aujourd'hui ...
Trouver:
Un moyen de résumer la commande de votre utilisateur sur une seule ligne, avec pur mysql.
Solution:
À utiliser GROUP_CONCAT
avec la IN
clause :
mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary FROM product WHERE product_id IN (13, 15, 16);
Quelles sorties:
+------------------------------------------------+
| order_summary |
+------------------------------------------------+
| Double Double + Animal Style Fries + Root Beer |
+------------------------------------------------+
Solution bonus:
Si vous voulez aussi le prix total, ajoutez SUM()
:
mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary, SUM(price) AS total FROM product WHERE product_id IN (13, 15, 16);
+------------------------------------------------+-------+
| order_summary | total |
+------------------------------------------------+-------+
| Double Double + Animal Style Fries + Root Beer | 10 |
+------------------------------------------------+-------+
PS: Toutes mes excuses si vous n'avez pas d' In-N-Out à proximité ...