如何在 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 解决方案可能是:
- 更少的代码行数
- 编写和维护更轻松、更快捷
- 更容易让他人(或未来的自己)理解
是的,运行需要更长的一秒钟,但没有人会注意到这一点。