如果数据库中的数据库id不存在,如何不显示排名
sql代码:
$query = "SELECT id, points, count(*)+1 AS rank FROM weekly_points
WHERE points > (SELECT points FROM weekly_points
WHERE id='".$account['id']."'
)";
id 15000不存在的查询示例:
SELECT id,points,count(*)+1 as rank
FROM weekly_points
WHERE points > (SELECT points FROM weekly_points WHERE id='15000')
-- output is rank 1 which is wrong
因为id不存在,它显示排名1,但我不想显示排名或9999999或最后一名
样本,排名显示
uid-----点------>等级
1
9条答案
按热度按时间yyhrrdl81#
1000---- 1
4
qpgpyjmq2#
对你的问题唯一有意义的解释是你想找出一些人的分数排名
id
,例如。15000
. 在这种情况下,我们可以先计算点的数量id
在一个单独的子查询中,然后在整个表上进行聚合,计算具有比此特定子查询更多点数的记录id
.使用相同的@barmar演示:
演示
cfh9epnr3#
200------4
3
u0njafvf4#
100-----5
2
f3temu5u5#
300-----3
5
ezykj2lf6#
可能最简单的方法是添加
having
条款:您不应该选择其他列,因为它们不是聚合的一部分。
deikduxw7#
400-----2
ulmd4ohb8#
你可以用
EXISTS
如下面的查询然后在屏幕上显示
$account['id']
如果不返回的值,则不作为有效id存在id
选择列表中的列。cgfeq70w9#
你可以用
CASE
当id不存在时返回默认值。演示
把它包括进去是没有意义的
id
以及points
在此查询中。它只需从点数高于给定id的不可预测行中选取它们。