Property和Reservation之间存在一对多的关系。属性具有名为'nr_of_bookings'的列。我需要DQL,它只检索COUNT(Reservation)小于Property.nr_of_bookins的属性。
示例:某些属性的nr_of_bookings = 3。如果它有5个预订相关,则不会被检索。但如果它有2个相关的预订,则会被检索。
我尝试了很多种组合,但我很想念。我发布了类似的问题 here,但最好从头开始。感谢。
答案 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子句中未找到的任何列,如果它没有包含在聚合函数中。