O rety.. Przeszedłem długą drogę, JOIN.. GROUP BY.. FROM (SELECT …) i oczywiście i tak nie chciało działać.. A potrzebowałem pewnej prostej rzeczy, którą opiszę na prostym przykładzie: w bazie trzymam n-zamówień, zaś każde zamówienie może być podzielone na x-części, przy czym każda ta część ma swój status (np.: zgłoszone, zapłacone, wysłane…). Problem: w jaki sposób wyciągnąć jednym zapytaniem wszystkie zamówienia, przy czym chce również wiedzieć czy poszczególne zamówienia posiadają części o różnych statusach. Nic nie działało i tak o to trafiłem w tajemnicze COUNT(DISTINCT), i okazało się, że właśnie ta funkcja robi wszystkie skomplikowane rzeczy, które ja próbowałem tworzyć w ciągu pół godziny :)
Przykład zastosowania:
SELECT ... ( SELECT IF(COUNT(DISTINCT internal_status), 'Różne statusy', op.internal_status) FROM order_parts WHERE id_iorder = op.id_order ) as order_part_status FROM orders JOIN order_parts AS op USING(id_order)
Jeden Komentarz
“prostej rzeczy (…) na prostym przykładzie” – dobre :) Ale metoda na pewno warta zapamiętania, dzięki!