所以我有一个名为FeaturedListing的模型,其字段日期是一个mysql日期字段。将有多个具有相同日期值的FeaturedListings。
我想查找所有包含N个或更多精选列表的日期。我想我必须按日期分组,然后找出哪些组中有N个或更多,并获得分组的值。任何人都可以给我任何指示来实现这一目标。可能需要原始的SQL查询。
编辑:感谢下面的答案,它让我走上了正确的轨道,我终于得到了一个我喜欢的解决方案。这有一些特定于我的应用程序的额外条件,但我认为非常清楚。此代码段会查找今天之后至少包含N个精选列表的所有日期。
$dates = $this->find('list', array(
'fields' => array('FeaturedListing.date'),
'conditions' => array('FeaturedListing.date >' => date('Y-m-d') ),
'group' => array('FeaturedListing.date HAVING COUNT(*) >= $N')
)
);
然后我调用array_values()从返回的列表中删除索引并将其展平为日期字符串数组。
$dates = array_values($dates);
答案 0 :(得分:1)
在“原始”SQL中,您将使用group by
和having
:
select `date`
from FeaturedListings fl
group by `date`
having count(*) >= N;
如果您想要这些日期的商家信息,则需要将其加入原始数据。这是一种方法:
select fl.*
from FeaturedListings fl join
(select `date`
from FeaturedListings fl
group by `date`
having count(*) >= N
) fld
on fl.`date` = fld.`date`
答案 1 :(得分:1)
无需转到原始SQL,您可以轻松实现这一点($n
是包含N的变量):
$featuredListings = $this->FeaturedListing->find('all', array(
'fields' => array('FeaturedListing.date'),
'group' => array('FeaturedListing.date HAVING COUNT(*)' => $n),
));