Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL] Złączenie lewe z tylko jednym wynikiem
Grzyw
post
Post #1





Grupa: Zarejestrowani
Postów: 561
Pomógł: 75
Dołączył: 19.08.2004
Skąd: Wrocław

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


Załóżmy, że mam tabelę users m.in. z PK id_user i innymi danymi oraz tabelę events z polami id_event (PK), added, id_user (FK do users).

Chciałbym wyciągnąć dane usera wraz z informacjami o ostatnim evencie tego usera. LEFT JOIN zwróci mi w tym przypadku tyle rekordów tego samego usera, ile było eventów. W jaki spsoób "dokleić" do danych usera info o tylko jednym, ostatnim (sortowanie po polu added bądź najwyższy id_event) evencie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Spawnm
post
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




np:
  1. ORDER BY tabela.pole DESC LIMIT 1
Go to the top of the page
+Quote Post
Grzyw
post
Post #3





Grupa: Zarejestrowani
Postów: 561
Pomógł: 75
Dołączył: 19.08.2004
Skąd: Wrocław

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


Cytat(Spawnm @ 3.07.2009, 08:32:21 ) *
np:
  1. ORDER BY tabela.pole DESC LIMIT 1

Działałoby, gdybym wyciągał jednego usera. Niestety, tworzę widok z wieloma userami.

Rozwiązałem tak:
  1. (...)
  2. LEFT JOIN events ON (user.id_user=event.ref_user AND event.id_event=(SELECT max(id_event FROM event WHERE ref_user = user.id_user))
  3. (...)


Ten post edytował Grzyw 3.07.2009, 08:00:47
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Wrzuć to w subselecta:
  1. SELECT * FROM (SELECT ... ) ORDER BY pole;
Go to the top of the page
+Quote Post

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: 23.08.2025 - 06:48