2

我正在使用此代码从我的数据库中进行计数和排序:

$qry = "select entertainer, count(*) from final_results group by entertainer order by count(*) desc";

我得到了正确的结果,因为它按顺序或受欢迎程度列出了所有内容。

我想要的是要显示的前 5 个结果,每个结果都有一个计数,然后是所有结果的总计数。

例如

最高响应 (10)
第二响应 (8)
第三响应 (6)
等等...

总数 = 56

我将不胜感激任何帮助和建议。

谢谢,

约翰 C

4

2 回答 2

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
于 2012-07-18T20:31:27.553 回答
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
于 2012-07-18T19:04:58.263 回答