0

所以我有一个模型 FeaturedListing,它有一个字段 date,它是一个 mysql 日期字段。将有多个具有相同日期值的精选列表。

我想找到所有有 N 个或更多 FeaturedListings 的日期。我想我必须按日期分组,然后找出哪些组中有 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);
4

2 回答 2

1

在“原始”SQL 中,您将使用group byand 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`
于 2013-07-14T17:39:05.260 回答
1

无需使用原始 SQL,您可以在 cake 中轻松实现这一点($n是保存 N 的变量):

$featuredListings = $this->FeaturedListing->find('all', array(
   'fields' => array('FeaturedListing.date'),
   'group' => array('FeaturedListing.date HAVING COUNT(*)' => $n),
));
于 2013-07-14T18:36:01.013 回答