MySQL: GROUP_CONCAT

Autor: Arkadiusz Tobiasz 9 stycznia 2012

Ostatnio zostałem poproszony, aby na liście zamówień w sklepie PrestaShop wyświetlić listę produktów, które zostały sprzedane. Oczywiście można by było tworzyć kolejne zapytanie i za pomocą pętli iterować kolejne wiersze z drugiej tabeli, ale również można zrobić wszystko za pomocą jednego zapytania.Trochę rozjaśnię sytuację. PrestaShop domyślnie prezentuje informacje o zamówieniach z tabeli ps_orders. Natomiast informacje o konkretnych sprzedanych produktach znajdziemy w tabeli ps_order_detail. Oczywiście można stworzyć nowe zapytanie i pobrać dane z tabeli ps_order_detail, następnie wyniki iterować tak, aby otrzymać listę produktów dla konkretnego zamówienia. Rozwiązanie to jednak wiązałoby się ze znacznymi modyfikacjami w kodzie samej Presty, dlatego też znalazłem dużo prostsze rozwiązanie. Możemy otrzymać interesujące nas dane korzystając z magicznego MySQL’owego GROUP_CONTAT.

1
2
3
4
5
6
7
8
9
10
SELECT
    a.`id_order`,
    (
        SELECT
            GROUP_CONCAT(od.`product_name` SEPARATOR ', ')
        FROM `ps_order_detail` od
        GROUP BY od.`id_order`
        HAVING od.`id_order`=a.`id_order`
    ) AS products
FROM `ps_orders` a

Dzięki powyższemu zapytaniu otrzymujemy listę produktów dla konkretnego zamówienia. Produkty są oddzielone w tym przypadku przecinkiem 🙂

Jeden komentarz

  1. ircykk napisał(a):

    Heh właśnie czegoś takiego szukałem do panelu admina w PrestaShop. Chciałem mieć nazwy produktów na liście zamówień. Wydaja się że zamiast HAVING powinno być zwykłe WHERE, ja dałem ta:

    (
    SELECT
    GROUP_CONCAT(od.`product_name` SEPARATOR „, „)
    FROM `ps_order_detail` od
    WHERE od.`id_order` = a.`id_order`
    GROUP BY od.`id_order`
    ) AS `products`,

    Pozdrawiam

Odpowiedz

 

Arkadiusz Tobiasz student Akademii Ekonomicznej im. Karola Adamieckiego w Katowicach na specjalnościach informatyka ekonomiczna oraz rachunkowość. Więcej...

jQuery Validation i funkcja remote

Jakiś czas temu zwrócił się do mnie użytkownik z problemem. Chodzi o to, że korzysta on z pluginu walidacji jQuery, […]

Zend Framework: integracja z Uploadify

W tym wpisie postaram się przedstawić Wam w jaki sposób zintegrować skrypt Uploadify z Zend Frameworkiem. Dzięki temu będziemy mogli […]

Javascript: Czasowe wyświetlanie reklamy

Czasami chcemy, aby na pewnym elemencie naszej strony wyświetlała się reklama przez jakiś czas, a następnie zniknęła. W tym wpisie […]

Linux: backup wszystkich baz danych MySQL

Swego czasu pisałem o tym jak z poziomu konsoli można szybko i przyjemnie zrobić backup bazy MySQL. Wszystko jest ładnie […]