![]() |
![]() ![]() |
![]() |
![]()
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:
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: 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. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 99 Pomógł: 15 Dołączył: 15.11.2007 Skąd: Nowogród Bobrz. Ostrzeżenie: (0%) ![]() ![]() |
Może dodaj MAX() i GROUP BY:
Kod SELECT k.*, MAX(a.unix_time) from klienci k LEFT JOIN akcje a ON a.id_klienta=k.ID GROUP BY k.ID
Ten post edytował magnus 15.05.2009, 12:03:42 -------------------- Efemental.pl - nasz punkt słyszenia :: recenzje :: tylko metal!
Opensource'owy klon Cantra: http://github.com/magnax/Simtr |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Nic mi to nie daje, wiem jak wyciągnąć max(), jednak są dołączane także inne informacje dlatego bardzo mi zależy na tym, aby join dołączał tylko te rekordy, gdzie czas = max (po prostu chcę ostatnio dodaną akcję dla każdego użytkownika, a nie pierwszą lepszą). Wiem nawet jak dodać podzapytanie do LEFT JOIN, jednak strasznie mi to zamula bazę, a left join musi być, bo nie każdy użytkownik ma jakąś akcję
![]() Ten post edytował Pilsener 15.05.2009, 12:31:10 |
|
|
![]()
Post
#4
|
|
Grupa: Nieautoryzowani Postów: 92 Pomógł: 15 Dołączył: 21.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
nie wiem tylko czy spełni to Twoje oczekiwania jesli chodzi o szybkość Ten post edytował heaven 15.05.2009, 20:59:26 |
|
|
![]()
Post
#5
|
|
![]() 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:
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. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 12.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdzone, działa. Sorry, ale nie wiem jak wstawić znacznik SQL do tego posta ;>
select klient.*, aukcja.unix_time, aukcja.id_aukcji from klient join ( select a.* from aukcja a join ( select id_klient, max(unix_time) as unix_time from aukcja group by id_klient ) ost_a on ost_a.unix_time = a.unix_time and ost_a.id_klient = a.id_klient ) aukcja on klient.id = aukcja.id_klient |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
24xls -> zaznaczasz treść która ma być w bbcode sqla i klikasz button {sql}kliknij [cytuj] mój post i zobacz jak jest u mnie , i popraw . potem swój usunę .
Ten post edytował Spawnm 23.05.2009, 10:32:23 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 22.06.2025 - 12:19 |