【问题标题】:Doctrine order by relation table with limit具有限制的关系表的教义顺序
【发布时间】:2009-12-16 11:28:38
【问题描述】:

我有两个表“系列”和“节目”,节目是多对一系列。

系列表

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,然后是系列 1,请参阅程序中的最后两行。

我的猜测是:

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

但这会返回系列 4 和系列 3。问题是 Doctrine 在执行将包含数据的查询之前使用不同的查询获取 id,他们使用这种策略,因为我认为 MySql 不能在子查询中使用限制。

我的问题,您如何通过 DQL 获得 series 2series 1

【问题讨论】:

    标签: doctrine limit one-to-many


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      • 2018-08-08
      • 2011-04-08
      相关资源
      最近更新 更多