如何在 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/