0

我如何查看前 5 个结果并将其余结果分组在Cakephp 2中的“其他”下?如果我有一个带有“页面”字段的表“访问”,它有例如 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 查询时会很容易......

4

1 回答 1

0

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

在有人提出“如果数据库查询可以,php 不应该这样做”之前,请在脑海中比较两种解决方案,并承认 php 解决方案可能是:

  • 更少的代码行
  • 更容易和更快地编写和维护
  • 其他人(或未来的自己)更容易理解

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

于 2013-09-05T23:20:38.520 回答