Sintaxe alternativa para concatenar várias linhas individuais
AVISO: Este post deixará você com fome.
Dado:
Eu me vi querendo selecionar várias linhas individuais - em vez de um grupo - e concatenar em um determinado campo.
Digamos que você tenha uma tabela de IDs de produtos, seus nomes e preços:
+------------+--------------------+-------+
| 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 |
+------------+--------------------+-------+
Então você tem um ajax sofisticado que lista esses filhotes como caixas de seleção.
Seu usuário de hipopótamo com fome seleciona 13, 15, 16
. Hoje não há sobremesa para ela ...
Encontrar:
Uma maneira de resumir a ordem do usuário em uma linha, com o mysql puro.
Solução:
Use GROUP_CONCAT
com a IN
cláusula the :
mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary FROM product WHERE product_id IN (13, 15, 16);
Quais saídas:
+------------------------------------------------+
| order_summary |
+------------------------------------------------+
| Double Double + Animal Style Fries + Root Beer |
+------------------------------------------------+
Solução bônus:
Se você também quiser o preço total, jogue 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: Desculpas se você não tiver um In-N-Out por perto ...