![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 11.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Mam następujący problem. Istnieją 2 tabele: osoby i statusy, przy czym połączenie między nimi jest jeden do wielu. Jest tak z uwagi na to, że w tabeli statusy zapisują się też statusy historyczne. Mam do wykonania zapytanie, które pobierze dane osoby oraz informacje o jej aktualnym statusie. Dla ustalenia uwagi:
Tabela osoby:
Tabela statusy:
Problem polega na tym, jak zmusić MySQL do wybrania tego statusu, który ja chce? A chcę taki, którego data_rozpoczęcia jest maksymalna. Jeżeli wykonam , to otrzymam zdublowane rekordy. Jeżeli wykonam , to zostanie wybrany przypadkowy status (chyba najstarszy). Jeżeli wykonam , to nic się nie zmieni. Jeżeli wykonam , to osoba mająca wiele statusów zniknie z wyników. Jeżeli wykonam , to otrzymam właściwą datę statusu, ale nieprawidłowe dane. Nic więcej nie przychodzi już mi do głowy. Może ktoś wie, jak rozwiązać mój problem? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
MySQL nie obsługuje LIMIT w JOINach, ale w tym przypadku można to bardzo łatwo objeść. W tabeli ze statusami dodaj nową kolumnę "jest aktywny" o wartości 1 lub 0. Dodaj TRIGGERa, który przy dodaniu nowego rekordu zmieni istniejące 1 na 0.
Wtedy zapytanie uprości się:
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 11.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Wszystko byłoby fajnie, gdyby nie to, że tabelki są częścią sporego systemu, który został zaprojektowany, jak został i jedyna identyfikacja aktualnego statusu jest poprzez pole data_rozpoczecia. Zastanawiam się teraz nad tym, czy nie można by było zrobić wrappera na to zapytanie, żeby można było użyć WHERE'a i jak go użyć...
[Edit] Udało mi się ![]()
Dzięki Crozin ![]() Ten post edytował d4ro 11.02.2011, 17:21:34 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 19:23 |