Sintassi alternativa per concatenare più righe singole
ATTENZIONE: questo post ti farà venire fame.
Dato:
Mi sono ritrovato a voler selezionare più righe singole, invece di un gruppo, e concatenare un determinato campo.
Supponiamo che tu abbia una tabella di ID prodotto e i loro nomi e prezzi:
+------------+--------------------+-------+
| 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 |
+------------+--------------------+-------+
Quindi hai un po 'di fantasia ajax che elenca questi cuccioli come caselle di controllo.
Il tuo utente affamato di ippopotamo seleziona 13, 15, 16
. Nessun dessert per lei oggi ...
Trova:
Un modo per riassumere l'ordine del tuo utente in una riga, con puro mysql.
Soluzione:
Utilizzare GROUP_CONCAT
con la IN
clausola :
mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary FROM product WHERE product_id IN (13, 15, 16);
Quali uscite:
+------------------------------------------------+
| order_summary |
+------------------------------------------------+
| Double Double + Animal Style Fries + Root Beer |
+------------------------------------------------+
Soluzione bonus:
Se vuoi anche il prezzo totale, aggiungi 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: mi scuso se non hai un In-N-Out nelle vicinanze ...