Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie jeden do wielu - jak sprawić, by JOIN wybrał tylko jeden konkretny wiersz
d4ro
post
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:
  • id
  • imie
  • nazwisko


Tabela statusy:
  • id
  • id_osoby
  • data_rozpoczecia
  • info1
  • info2
  • info3


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
  1. SELECT * FROM osoby o
  2. LEFT JOIN statusy s ON o.id=s.id_osoby
, to otrzymam zdublowane rekordy.

Jeżeli wykonam
  1. SELECT * FROM osoby o
  2. LEFT JOIN statusy s ON o.id=s.id_osoby
  3. GROUP BY o.id
, to zostanie wybrany przypadkowy status (chyba najstarszy).

Jeżeli wykonam
  1. SELECT * FROM osoby o
  2. LEFT JOIN statusy s ON o.id=s.id_osoby
  3. GROUP BY o.id
  4. HAVING max(data_rozpoczecia)
, to nic się nie zmieni.

Jeżeli wykonam
  1. SELECT * FROM osoby o
  2. LEFT JOIN statusy s ON o.id=s.id_osoby
  3. GROUP BY o.id
  4. HAVING max(data_rozpoczecia)=data_rozpoczecia
, to osoba mająca wiele statusów zniknie z wyników.

Jeżeli wykonam
  1. SELECT *, max(data_rozpoczecia) FROM osoby o
  2. LEFT JOIN statusy s ON o.id=s.id_osoby
  3. GROUP BY o.id
, 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?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 20:02