Порядок учений по таблице отношений с лимитом - PullRequest
2 голосов
/ 16 декабря 2009

У меня есть две таблицы "серии" и "программы", где количество программ составляет от одной до одной серии.

Таблица серии

id | name
--------------
1  | lorem
2  | ipsum
3  | foo
4  | bar

Таблица программ

id | name      | series_id
---------------------
1  | program1  | 1
2  | program2  | 2
3  | program3  | 3
4  | program4  | 4
5  | program5  | 1
6  | program6  | 2
7  | program7  | 3
8  | program8  | 4
9  | program9  | 1
10 | program10 | 2
11 | program11 | 1
12 | program12 | 2

Я бы хотел, чтобы в Доктрине (1.2) две серии с самой последней программой, в данном случае серия 2, затем серия 1, увидели последние две строки в программах.

Мое предположение будет:

$q = Doctrine_Query::create()->from('Series s')
                             ->leftJoin('s.Programs p')
                             ->orderBy('p.id desc')
                             ->limit(2);

но это возвращает серию 4 и серию 3. Проблема в том, что Doctrine использует отдельный запрос для получения идентификаторов перед выполнением запроса, в который будут включены данные, они используют эту тактику, так как MySql не может использовать limit в подзапросах, я думаю.

Мои вопросы, как бы вы получили серии 2 и серии 1 через DQL?

1 Ответ

1 голос
/ 28 июля 2011

попробуйте это:

$q = Doctrine_Query::create()
    ->select('s.name')
    ->addSelect('(SELECT p.series_id FROM Programs p WHERE p.series_id = s.id) as series_name')
    ->from('Series s');
    ->orderBy('p.id desc')
    ->limit(2);
...