Doctrine 条令查询计算WHERE子句中的最大值
我有以下表格: 订户 订户十年Doctrine 条令查询计算WHERE子句中的最大值,doctrine,doctrine-1.2,Doctrine,Doctrine 1.2,我有以下表格: 订户 订户十年 subscriber_id | year | --------------+-------+ 1 | 2009 | 1 | 2010 | 1 | 2011 | 2 | 2009 | 2 | 2010 | 3 | 2010 | 我想只使用最大值为x的记录进行高级搜索。 如果x=2010 结果查询必须是:Sam
subscriber_id | year |
--------------+-------+
1 | 2009 |
1 | 2010 |
1 | 2011 |
2 | 2009 |
2 | 2010 |
3 | 2010 |
我想只使用最大值为x的记录进行高级搜索。
如果x=2010
结果查询必须是:Sam和Joe
我试试这个:
$query = $this->createQuery('su')
->select('su.id, su.name)
->addWhere(
'(SELECT MAX(year) AS maxYear FROM `subscribers_years` WHERE `subscriber_id`=`su.id`) = ?',
2010
);
但是我有一个错误消息:消息:找不到类订阅者\u年
我应该如何正确地编写查询
解决方案
我的错误是我没有使用类名原则作为From,而是使用了表mysql的名称!:S在条令子查询中不能使用纯SQL。你有两个选择:
订户\u年
表的型号名称如果没有,您可以随时为您的
订阅者添加一个条令类。我认为最好的方法是使用createSubquery()
明确地告诉条令关于子查询,然后将其嵌套到where条件中。该模式非常简单,可以用于任何复杂的情况。然后,您的查询应该如下所示:
$query = $this->createQuery('su')
->select('su.id, su.name)
;
$subquery = $query->createSubquery()
->select("MAX(year) AS maxYear")
->from("SubscriberYear")
->where("subscriber_id=su.id")
;
$query->addWhere($subquery->getDql().' = ?', 2010 );
下面是创建子查询的另一个示例:
$query->addWhere('(SELECT MAX(year) AS maxYear FROM SubscriberYear WHERE subscriber_id=su.id) = ?', 2010 );
$query = $this->createQuery('su')
->select('su.id, su.name)
;
$subquery = $query->createSubquery()
->select("MAX(year) AS maxYear")
->from("SubscriberYear")
->where("subscriber_id=su.id")
;
$query->addWhere($subquery->getDql().' = ?', 2010 );