Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> LEFT JOIN pobierający określone rekordy, "inteligentne" złączenie tabel, wiele do jednego
Pilsener
post
Post #1





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Hej, mam np. tabelę klienci:

ID||Imię||Nazwisko

I tabelę akcje:
ID_klienta||unix_time||id_akcji

I chodzi mi o to, żeby wyświetlić listę klientów + akcje na zasadzie:
  1. SELECT * FROM klienci LEFT JOIN akcje ON akcje.id_klienta=klienci.id


Jednak jeden klient może mieć wiele akcji, a mi zależy na tym, aby wyświetlić tylko ostatnią akcję (czyli tą, gdzie time ma największą wartość)

Próbowałem coś w stylu:
  1. SELECT * FROM klienci LEFT JOIN(SELECT * FROM akcje ORDER BY time DESC LIMIT 1 ) akcje ON akcje.id_klienta=klienci.id
lecz nie chodzi i nie jestem pewny, czy właśnie tak to należy zrobić, czy może iść w inną stronę, stąd prośba do Was.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


No niestety muli, podobnie jak uproszczona wersja tego:
  1. SELECT * FROM klienci LEFT JOIN(SELECT * FROM akcje ORDER BY time DESC) akcje ON akcje.id_klienta=klienci.id


Wszystko zmierza do tego, że będę musiał podzielić to na dwie tabele:
- aktualna_akcja - i przy każdej akcji updatować
- spis_akcji - i tu wrzucać normalnie insertem każdą akcję, by mieć ich spis

Najchętniej bym wrzucił id_aktualnej_akcji do tabeli klienci, ale jest ona bardzo duża a te akcje dotyczą jakiś 2-3% wszystkich klientów, więc nie ma sensu - LEFT JOIN'em bardzo szybko i sprawnie się to dołącza.
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: 27.12.2025 - 08:28