php - Cakephp,选择前 5 个结果,然后将其余结果分组到 "Other"?

标签 php mysql cakephp

如何在 Cakephp 2 中查看前 5 个结果并将其余结果分组到“其他”下?如果我有一个带有“page”字段的表“visits”,它有例如 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 解决方案可能是:

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

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

关于php - Cakephp,选择前 5 个结果,然后将其余结果分组到 "Other"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18647122/

相关文章:

php - 简单的PHP随机数组

php - PHP 中的 UTF8 文件名和不同的 Unicode 编码

mysql - 如何从表中选择复杂数据并将其从同一个表中删除

mysql - 如何从 mySQL 中的组合表中获取列的总和?

forms - CakePHP - 输入选择不从变量中获取选择选项

php - CakePHP 中的 Ajax 错误处理

php - CakePHP 使用 Shell cronjob 中的电子邮件组件

javascript - 在脚本标签php中转义单引号

php - 我们可以使用 PHP 使用 Twilio API 检索调用者位置信息吗?

php - 在数据库中存储 ckeditor 值(html 标记)的正确方法? (换行问题)