2

「シリーズ」と「プログラム」の2つのテーブルがあり、プログラムは多対1のシリーズです。

シリーズ表

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

Doctrine(1.2)で、最新のプログラムを含む2つのシリーズ、この場合はシリーズ2、続いてシリーズ1を取得したいと思います。プログラムの最後の2行を参照してください。

私の推測は次のようになります:

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

しかし、これはシリーズ4とシリーズ3を返します。問題は、MySqlがサブクエリで制限を使用できないため、Doctrineがデータが含まれるクエリを実行する前にIDを取得する別個のクエリを使用することです。

私の質問ですが、 DQLを介してシリーズ2シリーズ1をどのように入手しますか?

4

1 に答える 1

1

これを試して:

$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);
于 2011-07-28T11:17:12.200 に答える