蛋糕,选择前 5 个结果,然后将其余结果分组到“其他”


Cakephp, Select top 5 results then group the rest to "Other"?

如何在 Cakephp 2 中查看前 5 个结果并将其余结果分组到"其他"下?如果我有一个带有"页面"字段的表"访问",它有例如 100(它会更多)行,我需要结果如下:

Other    40
/        20
/about   15
/contact 10
/welcome 10
/test     5

这是使用常规Mysql执行此操作的一种方法:

    SELECT case when v2.page is not null then v1.page else 'other' end AS viewpage, COUNT(*) AS count
    FROM visits v1
    LEFT JOIN 
    (
        SELECT page, COUNT(*) as pcount
        FROM  visits
        GROUP BY page
        ORDER BY pcount DESC
        LIMIT 5
    ) v2 on v1.page = v2.page
    GROUP BY viewpage
    ORDER BY count DESC

但是如何在 Cakephp 2 中做到这一点呢?以为当我组成 Mysql 查询时会很容易......

如果性能不是问题(如果您只处理 100 行,则不应该是问题),那么最好只获取所有结果,然后使用 PHP 循环并计算总计。

在任何人谈论"如果数据库查询可以,php 不应该这样做"之前,请在您的脑海中比较这两种解决方案,并承认 php 解决方案可能是:

  • 更少的代码行数
  • 编写和维护更轻松、更快捷
  • 更容易让他人(或未来的自己)理解

是的,运行需要更长的一秒钟,但没有人会注意到这一点。