检索具有最少数量相关记录的记录

时间:2010-10-26 16:08:05

标签: php doctrine doctrine-1.2

Property和Reservation之间存在一对多的关系。属性具有名为'nr_of_bookings'的列。我需要DQL,它只检索COUNT(Reservation)小于Property.nr_of_bookins的属性。

示例:某些属性的nr_of_bookings = 3。如果它有5个预订相关,则不会被检索。但如果它有2个相关的预订,则会被检索。

我尝试了很多种组合,但我很想念。我发布了类似的问题 here,但最好从头开始。感谢。

1 个答案:

答案 0 :(得分:1)

你试过了吗?

'SELECT p FROM Product p WHERE SIZE(p.reservations) < p.nr_of_bookings'
编辑:以上是针对Doctrine 2.对于Doctrine 1.2,查看你的代码,我猜你的HAVING子句引用了一个不在group by中的东西或者是一个聚合函数的结果。尝试这样的事情:

$q = PropertyTable::getInstance()
    ->createQuery('p') 
    ->select('p.*, COUNT(r.id) as num_of_reservations, SUM(p.nr_of_bookings) as num_bookings') 
    ->leftJoin('p.Reservation r') 
    ->groupBy('p.id') 
    ->having('num_of_reservations < num_bookings');

您按p.id进行分组,因此SUM(p.nr_of_bookings)将等于p.nr_bookings

来自MySQL文档:

  

SQL标准不允许HAVING子句命名GROUP BY子句中未找到的任何列,如果它没有包含在聚合函数中。