W bazie znajdują się dwie tabele: Albumy i Utwory (zwane Lyricsami). Chciałbym wypisać posortowaną listę albumów wg. liczby utworów w każdym z nich. Skorzystałem z Manuala Doctrine, tworzy mi się prawidłowe (co do logiki) zapytanie:
SELECT DISTINCT a3.album_id FROM albums a3 INNER JOIN artists a4 ON a3.album_artist_id = a4.artist_id INNER JOIN lyrics l2 ON a3.album_id = l2.lyric_album_id WHERE a3.album_title LIKE '%%' ORDER BY a3.album_title ASC LIMIT 10 SELECT a.album_id AS a__album_id, a.album_artist_id AS a__album_artist_id, a.album_title AS a__album_title, a.album_highlighted AS a__album_highlighted, a.album_date_add AS a__album_date_add, a2.artist_id AS a2__artist_id, a2.artist_letters_id AS a2__artist_letters_id, a2.artist_name AS a2__artist_name, a2.artist_surname AS a2__artist_surname, a2.artist_subname AS a2__artist_subname, a2.artist_date_add AS a2__artist_date_add, a2.artist_views AS a2__artist_views, l.lyric_id AS l__lyric_id, l.lyric_artist_id AS l__lyric_artist_id, l.lyric_album_id AS l__lyric_album_id, l.lyric_title AS l__lyric_title, l.lyric_content AS l__lyric_content, l.lyric_status AS l__lyric_status, l.lyric_date_add AS l__lyric_date_add, l.lyric_highlighted AS l__lyric_highlighted, l.lyric_views AS l__lyric_views, COUNT(l.lyric_id) AS l__0 FROM albums a INNER JOIN artists a2 ON a.album_artist_id = a2.artist_id INNER JOIN lyrics l ON a.album_id = l.lyric_album_id WHERE a.album_id IN ('127', '2008', '388', '684', '904', '2299', '108', '956', '2127', '1075') AND (a.album_title LIKE '%%') ORDER BY a.album_title ASC
Do stronnicowania wykorzystuje sfDoctrinePager(); z ustawionym limitem wyników na 10. Jak nie trudno zauważyć liczba Albumów osiąga do 2299 a mimo to w IN() znajduje się tylko 10 idików.
$this->albumss = Doctrine_Query::create(); $this->albumss->select('al.*, ly.*, a.*, COUNT(ly.lyric_id) count'); $this->albumss->from('Albums al'); $this->albumss->innerJoin('al.Artist a'); $this->albumss->innerJoin('al.Lyric ly'); .......... $this->albums = new sfDoctrinePager('Albums', $request->getParameter('limit')); $this->albums->setQuery($this->albumss); $this->page = $request->getParameter('page', 1); $this->albums->setPage($this->page); $this->albums->init();
Jak zmienić fakt, że limit dotyczy ilości idików Albumów a nie już gotowej listy wyników z uwzględnieniem wszystkich albumów ?
Dziękuje z góry za rady, wracam do kombinowania.