SQL(MySQL + PHP) 查询,查询排名,表内一个人多条数据,查出最大的那条排名,请问!

发布网友 发布时间:2022-04-06 07:02

我来回答

5个回答

懂视网 时间:2022-04-06 11:23

PHP实现排名并查询指定用户排名

如图:
假设一个user表,此时需要根据number客户数量对用户进行排名。
user表

于是,我们要对user表内的用户进行一个排名:

$sql = "SELECT p.name,p.number, @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r, (SELECT * FROM ruser ORDER BY number DESC) AS p"

*注:*1、 SELECT @rownum := 0:表示对rownum赋初始值0
2、@rownum := @rownum + 1:表示对rownum加1,语句中会从1开始,每一行往下都自动加1
查询结果如下:
排行
如图所示,上述代码会根据user表中的number从大到小进行排序。

如果需要查询用户小王的排名,就要根据他的openid来查询排名:

$sql = "SELECT b.openid,b.name,b.number,b.rownum FROM(SELECT t.*, @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r,(SELECT * FROM partneruser ORDER BY `number` DESC) AS t) AS b WHERE b.openid = "o4mxs5Tia6Ieayvxiebx8rTc1zO4" ";

查询结果如下:
用户排名

热心网友 时间:2022-04-06 08:31

直接使用一条查询语句就能解决了。
select * from 你的表名 order by score desc limit 3
如果只要查name score的话。则是:
select name,score from 你的表名 order by score desc limit 3
说明:order by score desc -----按score降序排序
limit 3取3条数据。追问这样首先没有区分 round,就是没有确定是哪一轮。
第二个问题更关键,就是可能出现
eee 200
eee 199
opq 182
的情况,我不想让 eee 出现两次,只要一次。

追答只要出现一次的话可以使用这样写:
select *,count(distinct name),max(score) from 表名 group by name order by max(score) desc limit 3
其中你的值是最后一项max(score)
distinct就是去除重复的。

热心网友 时间:2022-04-06 09:49

select name,score,round from (select * from sqlTest order by score desc) as tab group by name having round= 1 order by score desc,name;

+------+-------+-------+
| name | score | round |
+------+-------+-------+
| eee | 200 | 1 |
| opq | 182 | 1 |
| abc | 132 | 1 |
+------+-------+-------+

是这个效果不?

热心网友 时间:2022-04-06 11:24

这个好写

用分组

按name来分组

取最多的score

取出前三条追问啊谢谢,能具体讲讲吗?我是新手啊!如果能具体讲讲绝对把悬赏分给你啦!

追答你看我在乎你那点悬赏吗?

热心网友 时间:2022-04-06 13:15

select * from table-name where round = 1 group by name order by score desc limit 3

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com