Wednesday, July 3, 2019

sql - Can I concatenate multiple MySQL rows into one field?

WARNING: This post will make you hungry.


Given:


I found myself wanting to select multiple, individual rows—instead of a group—and concatenate on a certain field.


Let's say you have a table of product ids and their names and prices:


+------------+--------------------+-------+
| 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 |
+------------+--------------------+-------+

Then you have some fancy-schmancy ajax that lists these puppies off as checkboxes.


Your hungry-hippo user selects 13, 15, 16. No dessert for her today...


Find:


A way to summarize your user's order in one line, with pure mysql.


Solution:


Use GROUP_CONCAT with the the IN clause:


mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary FROM product WHERE product_id IN (13, 15, 16);

Which outputs:


+------------------------------------------------+
| order_summary |
+------------------------------------------------+
| Double Double + Animal Style Fries + Root Beer |
+------------------------------------------------+

Bonus Solution:


If you want the total price too, toss in 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: Apologies if you don't have an In-N-Out nearby...

No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...