Mam dość duży problem ze skonstruowaniem pewnego zapytania.
Mam dwie tabele:
"produkt"
- produktId
- nazwa
- ...
oraz "komentarz"
- komentarzId
- produktId
- ...
- data
Potrzebuję wybrać 100 ostatnich komentarzy do produktów, pogrupowanych po produktId posortowanych malejąco wg daty ostatniego komentarza.
Czyli jeśli ktoś doda komentarz do danego produktu wędruje on na pierwszą pozycję, a obok pokazuje datę ostatniego komentarza.
Wynikiem ma być mniej więcej coś takiego:
Lp. | nazwa | ostatni komentarz
1. | Produkt nr 1 | 13.04.2009 13:43
2. | Produkt nr 2 | 13.04.2009 11:01
3. | Produkt nr 3 | 12.04.2009 21:12
Nie byłoby to może dużym problemem, gdyby nie rozmiar obu tabel,które zawierają po kilkadziesiąt tysięcy rekordów.
Próbowałem coś takiego:
SELECT produkt.produktId, produkt.nazwa, (SELECT dubel.DATA FROM komentarz AS dubel WHERE produkt.produktId = dubel.produktId ORDER BY dubel.DATA DESC LIMIT 1 ) AS ostatniKomentarz FROM produkt LEFT JOIN komentarz ON produkt.produktId = komentarz.produktId GROUP BY produkt.produktId ORDER BY ostatniKomentarz DESC LIMIT 0, 30
Nie wiem czy to jest wina błędnego zapytania, czy wielkości tabel, ale po wywołaniu takiego zapytania, zawiesza mi się przeglądarka, a czasem nawet komp.
Z góry wielkie dzięki za pomoc,
pozdrawiam