Witam.

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:

  1. 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
  2.  
  3. 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.

  1. $this->albumss = Doctrine_Query::create();
  2. $this->albumss->select('al.*, ly.*, a.*, COUNT(ly.lyric_id) count');
  3. $this->albumss->from('Albums al');
  4. $this->albumss->innerJoin('al.Artist a');
  5. $this->albumss->innerJoin('al.Lyric ly');
  6.  
  7. ..........
  8.  
  9. $this->albums = new sfDoctrinePager('Albums', $request->getParameter('limit'));
  10. $this->albums->setQuery($this->albumss);
  11. $this->page = $request->getParameter('page', 1);
  12. $this->albums->setPage($this->page);
  13. $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.