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_CONCATcom a INclá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 ...