1

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

一个例子:Some Property 有 nr_of_bookings = 3 。如果它有 5 个 Reservations 相关,则不会被检索。但如果它有 2 个相关的 Reservations,它将被检索。

我尝试了很多组合,但我显然错过了一些东西。我在这里发布了类似的问题 ,但最好从头开始。谢谢。

4

1 回答 1

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 文档:

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

于 2010-10-26T16:53:59.233 回答