Sql 组合2个独立的复杂查询

Sql 组合2个独立的复杂查询,sql,mysqli,subquery,union,Sql,Mysqli,Subquery,Union,我最近开发了一款在线游戏,目前仍处于开发阶段。使用mysqliI查询表以获取当前用户的排名。这是基于表中的位置,按分数排序 问题是我要得到两个独立的排名,我目前在两个独立的查询中这样做,有人能告诉我如何组合这些排名 当前设置 $sql="SELECT * from ( SELECT mode1_score, name, id, @rank := @rank + 1 as rank FROM users, (SELECT @rank := 0) r ORDER BY mode1_score D

我最近开发了一款在线游戏,目前仍处于开发阶段。使用
mysqli
I查询表以获取当前用户的排名。这是基于表中的位置,按分数排序

问题是我要得到两个独立的排名,我目前在两个独立的查询中这样做,有人能告诉我如何组合这些排名

当前设置

$sql="SELECT * from 
(
SELECT mode1_score, name, id, @rank := @rank + 1 as rank 
FROM users, (SELECT @rank := 0) r
ORDER BY mode1_score DESC
) users
order by mode1_score DESC";

//code to output rank here for game mode 1

// new query
$sql="SELECT * from 
(
SELECT mode2_score, name, id, @rank := @rank + 1 as rank 
FROM users, (SELECT @rank := 0) r
ORDER BY mode2_score DESC
) users
order by mode2_score DESC";

//code to output rank here for game mode 2
数据结构

表名=
用户

id       |  name  |  mode1_score  |  mode2_score
-------------------------------------------------
1233345     foo         0              1200
3454535     boo        847             1143
2344443     doo        1127            687

我唯一能想到的就是做下面的查询。我要做的是设置一个标识模式分数的常量,然后我首先包装查询并按模式常量排序,然后按实际分数排序。然后在您的代码中,您知道
ModeConst
of
1
代表
mode1\u分数
,而
ModeConst
of
2
代表
mode2\u分数

mode_分数
将按照您想要的顺序排序,因为常量是先排序的

SELECT * FROM 
(
  SELECT 1 AS ModeConst, mode1_score AS ModeScore, name, id, @r := @r + 1 as rank 
  FROM users, (SELECT @r := 0) r
  ORDER BY mode1_score DESC 
) a
UNION 
SELECT * FROM 
(
  SELECT 2 AS ModeConst, mode2_score AS ModeScore, name, id, @s := @s + 1 as rank 
  FROM users, (SELECT @s := 0) s
  ORDER BY mode2_score DESC
) b
ORDER BY 1, 2 DESC
这将产生以下结果:

您的代码将处理您所拥有的一切:

//code to output rank here for game mode 1
//code to output rank here for game mode 2
然后,一旦找到值为
2
的第一个
ModeConst
,您将开始并完成执行您所拥有的任何操作:

//code to output rank here for game mode 1
//code to output rank here for game mode 2

对这两个表使用
内部联接
,对要检索的行使用别名,并对这两个字段按顺序进行排序。这两个表是通过键链接的吗?它们使用同一个表,只是分数模式在两个单独的列中。如果您有
mode1\u分数
值,那么对于单个记录,您也会有
mode2\u分数
值吗?或者,一个是空的/零的吗?@StevenPHP好吧,那么我需要一个机会来了解你的成就here@Linger任何一个分数都可以是0到1500,谢谢。这导致了一个错误。我只有一页空白。我已启用错误输出,但没有显示任何内容。@StevenPHP,我在答案中添加了一个SQL FIDLE示例,以显示查询确实有效。你哪里有打字错误吗?你使用的查询和我使用的完全一样吗?谢谢你的帮助,它使可视化变得容易多了。基于当前数据结构返回的示例将是
foo
对于
mode1\u分数
为排名1,对于
mode2\u分数
为排名3。就我所知,小提琴没有返回那些值?你的意思是
foo
应该是
mode2\u分数的排名1,因为它是按降序排列的吗?你用排名做什么?输入错误,对不起-在我的评论中,我的意思是写
doo
而不是
foo