Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [sql] nie powtarzające się rekordy
Forum PHP.pl > Forum > Bazy danych > MySQL
harryk
W bazie znajdują się następujące tabele (w uproszczeniu):

  1. komentarze ( id | galeria_id | artykul_id | zzz_id | autor | text | DATA )
  2. galeria ( id | nazwa )
  3. artykul ( id | nazwa | text )
  4. zzz ( id | nazwa )


Chce pobrać 10 najnowszych komentarzy (bez powtarzania tematow, wiec jesli ostatnie 4 komentarze wg. daty beda z jednego artykulu, to ma tego nie powtarzać).

Wiem jak sobie z tym poradzic, gdyby w komentarze bylo np. tylko artykul_id (a nie jeszcze galeria_id i zzz_id). Wtedy wystarczy DISTINCT, ale jesli są te 3 pola, to DISTINCT sobie nie radzi, albo ja nie potrafie tego napisac (z GROUP BY niby tez probowalem, ale skutek troche dziwny)?

Wiem, że tematów było o tym sporo, ale właśnie DISTINCT i GROUP BY było tam opisywane. Próbowałem z tym, nie udało się, więc pytam...
SongoQ
  1. SELECT MAX(id) AS id
  2. FROM komentarze GROUP BY artykul_id


To zapytanie daje Ci id najwiekszych (najnowszych) komentarzy z danego artykulu
harryk
A dodając do tego galeria_id i zzz_id jak to miałoby wyglądać? Tzn. ze dla nich mam zrobić 2 inne zapytania (a wiec łacznie 3)?
SongoQ
Np tak:

  1. SELECT *
  2. FROM artykul, galeria, zzz, komentarze
  3. (
  4. SELECT MAX(id) AS id
  5. FROM komentarze GROUP BY artykul_id
  6. ) t
  7. WHERE t.id = komentarze.id AND artykul.id = komentarze.artykul_id AND komentarze.galeria_id = galeria.id AND komentarze.zzz_id = zzz.id


A jesli czegos nie ma to mozesz uzyc LEFT JOIN
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.