Php MySQL-在联接中查找记录的位置

Php MySQL-在联接中查找记录的位置,php,mysql,sql,Php,Mysql,Sql,我有三个表,即包含用户信息的注册,排行榜包含用户ID和他们当前所在的级别,最后是“清除次数”,记录用户清除某个级别的时间 我正在使用MySQL生成一个排行榜。最高级别的用户将站在榜首。同一级别的用户将根据clear\u time,即他们清除该级别的时间进行排名。(首先清除该级别的用户排在前面) 以下是我为此目的使用的代码: SELECT t1.level, t3.user_id, t3.user_id2, t3.user_type FROM leaderboard AS t1 INNER JOI

我有三个表,即包含用户信息的
注册
排行榜
包含用户ID和他们当前所在的级别,最后是“清除次数”,记录用户清除某个级别的时间

我正在使用MySQL生成一个排行榜。最高级别的用户将站在榜首。同一级别的用户将根据
clear\u time
,即他们清除该级别的时间进行排名。(首先清除该级别的用户排在前面)

以下是我为此目的使用的代码:

SELECT t1.level, t3.user_id, t3.user_id2, t3.user_type
FROM leaderboard AS t1
INNER JOIN clear_times AS t2 ON ( t1.uid = t2.uid AND (t1.level -1) = t2.level ) 
INNER JOIN registrations AS t3 ON ( t1.uid = t3.id ) 
ORDER BY t1.level DESC , t2.clear_time ASC
id'是的主键,
uid`是外键


这段代码非常适合生成排行榜。现在,我想根据特定用户的
id
,找出其排名。我可以通过服务器端脚本、循环记录和使用计数器变量来完成这项工作。但我相信MySQL本身有一种方法可以做到这一点,即通过某种方式操纵上面的代码h我做不到。

一旦您知道目标用户的
级别和
清除时间,您只需计算排名高于给定顺序的记录数:

选择计数(*)
从排行榜中选为t1
在t1.uid=t2.uid和t1.level=t2.level+1上连接清除时间作为t2
在t1.uid=t3.id上以t3身份加入注册
其中t1.level>或(t1.level=?和t2.clear\u time<?)
如果需要,您可以使用进一步的联接或子查询来获取同一查询中有关目标用户的缺失信息。我将把它作为练习留给读者