Mam zapytanie SQL w postaci:
SELECT app.id_application, app.title, app.description, app.time, GROUP_CONCAT(DISTINCT u.email ORDER BY u.email SEPARATOR ', ' ) AS experts, org.name, GROUP_CONCAT(DISTINCT sc.STATUS ORDER BY sc.id_status_change ASC SEPARATOR '|' ) AS STATUS FROM `applications` AS app LEFT JOIN application_expert AS aex ON ( aex.id_application = app.id_application ) LEFT JOIN users AS u ON ( aex.id_user = u.id_user ) LEFT JOIN organisations AS org ON ( org.id_organisation = app.id_organisation) JOIN status_changes AS sc ON ( sc.id_application = app.id_application AND sc.STATUS = 'assigned' OR sc.STATUS = 'not assigned' ) GROUP BY app.id_application
Problem występuje w ostatnim złączeniu - status_changes.
Tabela status_changes:
-----------------------------
| id_status_change PK|
| id_application FK |
| status |
-----------------------------
Relacja tabeli applications do status_changes to jeden do wielu. Czyli każdemu rekordowi z tabeli applications przypada dokładnie jeden lub więcej rekordów z tabeli status_changes.
Chcę uzyskać ostatnio przydzielony status i to mi się udało (dostaję co prawda ciąg przedzielony znakami "|" ale to nie problem), jednak nie wiem jak zrobić filtrowanie po statusach.
Próbowałem to zrobić w JOIN jak napisane jest wyżej ale zwróci mi to nie tylko ostatnio przydzielony status, ale wszystkie wartości pola status odpowiadające jednemu rekordowi z tabeli applications.
Trochę zamotałem ale mam nadzieję, że ktoś zrozumie.
// edit
Chyba nie da się tak zrobić, raczej zrobię w applications kolumnę last_status z odwołaniem do tabeli status_changes.