我正在使用此代码对我的数据库进行计数和排序:
$qry = "select entertainer, count(*) from final_results group by entertainer order by count(*) desc";
我得到了正确的结果,因为它按顺序或受欢迎程度列出了所有内容。
我想要的是要显示的前5个结果,每个结果的计数,然后是所有结果的总计数。
e.g。
热门回应(10)
第二回应(8)
第三回应(6)
等... ...
总人数= 56
我将不胜感激任何帮助和建议。
谢谢,
John C
答案 0 :(得分:3)
您可以使用WITH ROLLUP
来获取全部内容,但这对于您想要的LIMIT 5
无效,只能获取前五个结果。 (编辑:)它也不适用于排序,如评论中所述。
因此,您要么必须获取所有结果,而不仅仅是前5个,并在应用程序中对它们进行排序,或使用两个不同的查询,可能使用UNION
在服务器端合并@RedFilter建议的方式。但是,如果你做两个单独的查询,我个人宁愿分别从客户端应用程序发出每个查询,因为稍后将总数从前五个中分割出来是太多的工作而没什么好处。
要获取所有结果,请使用
select entertainer, count(*)
from final_results
group by entertainer with rollup
要进行两次不同的提取,请使用
select entertainer, count(*)
from final_results
group by entertainer
order by count(*) desc
limit 5
和
select count(*)
from final_results
如果你想在一个联盟中同时进行,你可以这样做
(select 1 as unionPart, entertainer, count(*) as count
from final_results
group by entertainer
order by count(*) desc
limit 5)
union all
(select 2 as unionPart, 'Total count', count(*) as count
from final_results)
order by unionPart asc, count desc
答案 1 :(得分:2)
select entertainer, count
from (
(select entertainer, count(*) as count, 1 as sort
from final_results
group by entertainer
order by count(*) desc
limit 5)
union all
(select 'Total count', (select count(*) from final_results), 2 as sort)
) a
order by sort, count desc