Alternatywna składnia do łączenia wielu pojedynczych wierszy
OSTRZEŻENIE: Ten post spowoduje, że będziesz głodny.
Dany:
Zauważyłem, że chcę wybrać wiele pojedynczych wierszy - zamiast grupy - i połączyć w jedno pole.
Załóżmy, że masz tabelę identyfikatorów produktów oraz ich nazw i cen:
+------------+--------------------+-------+
| 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 |
+------------+--------------------+-------+
Potem masz jakieś fantazyjne-schmancy ajax, które wymienia te szczeniaki jako pola wyboru.
Twój głodny hipopotam wybiera 13, 15, 16
. Dziś nie ma dla niej deseru ...
Odnaleźć:
Sposób na podsumowanie zamówienia użytkownika w jednym wierszu za pomocą czystego mysql.
Rozwiązanie:
Skorzystaj GROUP_CONCAT
z tej IN
klauzuli :
mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary FROM product WHERE product_id IN (13, 15, 16);
Które wyjścia:
+------------------------------------------------+
| order_summary |
+------------------------------------------------+
| Double Double + Animal Style Fries + Root Beer |
+------------------------------------------------+
Rozwiązanie premiowe:
Jeśli chcesz również cenę całkowitą, wrzuć 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: Przepraszam, jeśli nie masz w pobliżu wejścia i wyjścia ...