2009-12-16 47 views
2

我有兩個表「系列」和「程序」,程序是多對一的系列。有限制的關係表的學說秩序

系列表

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的問題是,這種理論會使用不同的查詢得到的ID在做其中的數據將包括在查詢之前,他們使用該策略,因爲我認爲MySql不能在子查詢中使用限制。

我的問題,你會如何獲得系列2系列1通過DQL?

回答

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);