Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL] Warunek w LEFT JOIN
magnus
post
Post #1





Grupa: Zarejestrowani
Postów: 99
Pomógł: 15
Dołączył: 15.11.2007
Skąd: Nowogród Bobrz.

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


Zapytam, bo natknąłem się na taki ciekawy problemik.
Mianowicie mam 2 tabelki:
- users: id_user, login
- pics: id_pic, id_user, sciezka, data_dodania, domyslny
(oczywiście w uproszczeniu).
Relacja 1 do wielu.

I chciałbym jednym zapytaniem wyświetlić np. 5 userów według jakiegoś warunku razem z domyślnym zdjęciem (jeśli ma domyślne). Jeśli nie ma w ogóle skojarzonych fotek, albo istnieje fotka domyślna (i też pod warunkiem, że jedna), to można tak:
Kod
SELECT u.login, p.sciezka
FROM users u
LEFT JOIN pics p
ON u.id_user = p.id_user
WHERE p.domyslny=1 OR p.id_pic is null
ORDER BY u.login
LIMIT 5

Ale jak to zrobić przy założeniu, że może być kilka fotek, ale żadna z nich nie powinna być wyświetlana??

2. Przy okazji - a jakim zapytaniem podłączyć z drugiej tabeli zawsze tylko jeden wiersz (lub żaden jeśli nie ma) - w powyższym przykładzie np. zawsze jeden rekord z 'pics' z największą datą?

Ten post edytował magnus 4.03.2008, 00:01:40
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
abusiek
post
Post #2





Grupa: Zarejestrowani
Postów: 89
Pomógł: 5
Dołączył: 23.10.2006
Skąd: Gda?sk

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


Ad 1. Ja bym sprobowal tak:

  1. <?php
  2. SELECT u.login, p.sciezka
  3. FROM users u
  4. LEFT JOIN pics p
  5. ON u.id_user = p.id_user
  6. WHERE p.domyslny=1 OR p.id_pic is null or 1 = 1
  7. ORDER BY u.login
  8. LIMIT 5
  9. ?>


1 = 1 da true i wtedy warunek where bedzie prawdziwy nawet jesli user bedzie mial kilka zdjec i zadne domyslne.

Ad 2.

  1. <?php
  2. SELECT u.login, p.sciezka
  3. FROM users u
  4. LEFT JOIN pics p
  5. ON u.id_user = p.id_user
  6. WHERE (p.domyslny=1 OR p.id_pic is null) AND p.data_dodania in (select max(data_dodania) from pics group by id_pic)
  7. ORDER BY u.login
  8. LIMIT 5
  9. ?>


Nie mam zadnej bazy pod reka zeby stestowac czy dziala. Jesli piszesz to na mysql-u to bedziesz musial jeszcze obudowac podzapytanie, bo takie cos zawiesi serwer najprawdopodobniej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ale na postgresie powinno smigac
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: 25.08.2025 - 15:26