Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: selektywne grupowanie danych
Forum PHP.pl > Forum > Bazy danych > MySQL
AxZx
witam

mam 2 tabele: newsy, komentarze
chcialbym wyswietlic 10 najnowyszh komentarzy ale tylko po jednym (najnowszym) z kazdego newsa

poki co wyswietla mi najstarsze po zgrupowaniu

SELECT * FROM komentarze AS k INNER JOIN newsy AS n ON (n.news_id = k.news_id) GROUP BY k.news_id ORDER BY k.data_dodania ASC LIMIT 10

jezeli wiadomo o co chodzi to prosze o jakies sugestie, jezeli opis mojego problemu jest niejasny to tez prosze napisac:)

pozdrawiam
SongoQ
Problem czesto na tym forum spotykany. Rozwiazanie prosciutkie.

Na poczatku wyciagasz max(id) pogrupowane w twoim przypadku "news" - to jest podzapytanie.

Selectem wybierasz dane ze zlaczonych tabel + w from dajesz to podzapytanie i laczysz tymi wlasnie id ktore wyciagales w max.

Nie chcialem CI gotowca pisac przynajmniej sam sqla napiszesz i cos w glowie zostanie.
AxZx
ano pewnie ze tak smile.gif
zanim bym na to wpadl to by minelo kilka godzin, a potrzebuje to szybko
dzieki bardzo.

EDIT1:
chyba jednak nie zrozumialem o co konkretnie chodzi, bo nie wiem jak w FROM dac podzapytanie co by je jeszcze polaczyc
moze troche wiecej wskazowek?smile.gif

EDIT2:
a nie powinno byc przypadkiem MAX(data_dodania)? przeciez max id to nie znaczy ze news jest najnowszy:)
tylko ze jak wyciagam najnowsza date dodania to jak jeszcze przekazac ID tego newsa?

przykladowo:
  1. SELECT MAX(n1.data_dodania) FROM zesp_news AS n1 GROUP BY n1.zesp_id ORDER BY data_dodania DESC


EDIT3:
zakladamy ze najnowszy news ma najwiekszy ID, kolejnosc dat jest zgodna z kolejnoscia ID:) - zeby bylo prosciej
dobra droga podazam? (chyba nie wnioskujac po wynikach zapytania)
  1. SELECT * FROM zesp_news AS z WHERE (SELECT max(n.news_id) AS mx FROM zesp_news AS n WHERE z.zesp_id = n.zesp_id GROUP BY n.zesp_id)
  2. GROUP BY z.zesp_id


EDIT4:
pokombinowalem troche i wyszlo to co chcialem, ale nie wiem czy przypadkiem nie za dzuo tych kombinacji
prosba o ocene zapytania
  1. SELECT
  2. z.zesp_nazwa, n.news_id, n.news_tytul, n.data_dodania
  3. FROM zesp_news AS n
  4. INNER JOIN zespoly AS z ON(z.zesp_id = n.zesp_id)
  5. WHERE news_id IN (SELECT max(news_id) FROM zesp_news AS n2 GROUP BY n2.zesp_id)
  6. ORDER BY n.data_dodania DESC
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.