在mysql中使用case ORDER BY

时间:2014-07-20 06:01:23

标签: php mysql sql sorting

我有一个表格,包括:项目,排名分数和用户投票数。为简单起见:id,rank,votes。

我试图运行一个查询,将最高排名得分的项目排序到最低,除非投票数= 0.

因为我对新商品有基本排名分数,所以无法订购我的排名。

我已经尝试了以下内容以及其他一些排列:

$list = $dbh->query('SELECT * FROM ranks ORDER BY votes desc, rating desc case when min(votes)= 0 else rating desc');
看完之后无济于事: Conditional sorting in MySQLConditional sorting in MySQL?

我试过了:

SELECT * FROM ranks ORDER BY rating desc, case votes when 0 then votes end 

这是表,我得到的输出:

ID : Rating : Votes
2 : 201 : 9
3 : 100 : 0
4 : 100 : 0
5 : 100 : 0
1 : -13 : 9

我理想的输出是:

ID : Rating : Votes
2 : 201 : 9
1 : -13 : 9
4 : 100 : 0
5 : 100 : 0
3 : 100 : 0

正如您所看到的,这并没有将所有0个投票项目分组到最后。

我确信这是前额简单,我真的很感激任何指针和最佳做法。干杯!

3 个答案:

答案 0 :(得分:5)

这一组全部0结束。

SELECT * FROM `ranks` ORDER BY (Votes=0), Rating DESC

答案 1 :(得分:1)

QUERY

SELECT * 
FROM ranks 
ORDER BY case votes 
WHEN 0 THEN 0 
ELSE 1 END DESC, rating DESC

ORDER BY部分说的是:

  • 对于SELECT查询,当投票= 0(项目没有投票)时,则 mySQL会将投票数视为0.
  • ELSE - 对于所有其他投票数,请考虑投票数= 1。
  • END - 结束'案例'
  • DESC - 订购我们新审议的投票(0或1)从最高到最低。即将1组在顶部。
  • 评级DESC - 次要订购条件,在主要订购条件下,从最高评级到最低评级。

答案 2 :(得分:1)

我猜你不需要一个简单的命令来完成工作

SELECT * FROM ranks 
ORDER BY Votes DESC,Rating desc

Demo