Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] JOIN i order
Forum PHP.pl > Forum > Bazy danych > MySQL
grzesiek_g
Witam

Mam zapytanie SQL w postaci:
  1. SELECT app.id_application, app.title, app.description, app.time, GROUP_CONCAT(DISTINCT u.email ORDER BY u.email SEPARATOR ', ' ) AS experts,
  2. org.name,
  3. GROUP_CONCAT(DISTINCT sc.STATUS ORDER BY sc.id_status_change ASC SEPARATOR '|' ) AS STATUS
  4.  
  5. FROM `applications` AS app
  6.  
  7. LEFT JOIN application_expert AS aex ON ( aex.id_application = app.id_application )
  8. LEFT JOIN users AS u ON ( aex.id_user = u.id_user )
  9. LEFT JOIN organisations AS org ON ( org.id_organisation = app.id_organisation)
  10. JOIN status_changes AS sc ON ( sc.id_application = app.id_application AND sc.STATUS = 'assigned' OR sc.STATUS = 'not assigned' )
  11.  
  12. 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.
bliitz
a ORDER BY .... DESC LIMIT 1?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.