Sintaxis alternativa para concatenar múltiples filas individuales
ADVERTENCIA: Esta publicación te dará hambre.
Dado:
Me encontré con ganas de seleccionar múltiples filas individuales, en lugar de un grupo, y concatenar en un determinado campo.
Digamos que tiene una tabla de identificadores de productos y sus nombres y precios:
+------------+--------------------+-------+
| 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 |
+------------+--------------------+-------+
Luego, tienes un ajax sofisticado que enumera a estos cachorros como casillas de verificación.
Tu usuario de hipopótamo hambriento selecciona 13, 15, 16
. No hay postre para ella hoy ...
Encontrar:
Una forma de resumir el pedido de su usuario en una línea, con mysql puro.
Solución:
Usar GROUP_CONCAT
con la IN
cláusula :
mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary FROM product WHERE product_id IN (13, 15, 16);
Qué salidas:
+------------------------------------------------+
| order_summary |
+------------------------------------------------+
| Double Double + Animal Style Fries + Root Beer |
+------------------------------------------------+
Solución de bonificación:
Si también desea el precio total, agregue 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 |
+------------------------------------------------+-------+
PD: Disculpas si no tienes un In-N-Out cerca ...