Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Warunek w LEFT JOIN
Forum PHP.pl > Forum > Bazy danych > MySQL
magnus
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ą?
abusiek
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 winksmiley.jpg ale na postgresie powinno smigac
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.