按重要性相等的两列对MySQL表进行排序

按重要性相等的两列对MySQL表进行排序,mysql,Mysql,我有一个两人游戏,把分数存储在一张桌子上 我想从表中选择高分,这是我当前的代码: 从游戏中选择* 按大玩家1分数排序,玩家2核心描述 限制10 问题是,它只返回每行的一个实例,即使例如,第1行中的两个分数中较低的一个可以被列入前10名。使用UNION ALL: ( SELECT *, player1Score as score FROM games ORDER BY score DESC LIMIT 10 ) UNION ALL ( SELECT *, player2Scor

我有一个两人游戏,把分数存储在一张桌子上

我想从表中选择高分,这是我当前的代码:

从游戏中选择* 按大玩家1分数排序,玩家2核心描述 限制10

问题是,它只返回每行的一个实例,即使例如,第1行中的两个分数中较低的一个可以被列入前10名。

使用UNION ALL:

( SELECT *, player1Score as score
  FROM games 
  ORDER BY score DESC 
  LIMIT 10
)
UNION ALL
( SELECT *, player2Score AS score 
  FROM games 
  ORDER BY score DESC 
  LIMIT 10
)
ORDER BY score DESC
LIMIT 10

另外,不要使用SELECT*。明确列出列。

即使只有两个用户,您也最好创建一个players表和一个join表。然后,您可以轻松地创建一个查询来执行您试图执行的操作。当然,修改更新/保存函数以匹配新模式需要一点时间

players
-----
playerId
playerName

joinPlayerGame
-----
joinId
playerId
gameId

games
-----
modify the player score fields to just be 'score'

SELECT g.*, p.playerName FROM players p INNER JOIN joinPlayerGame j ON j.playerId = p.playerId INNER JOIN games g ON g.<whatever your key is> = j.gameId ORDER BY g.score DESC LIMIT 10

我希望这有帮助,祝你好运

表中有多少行?您是否需要关注性能?你有player1Score或player2Score的索引吗?
players
-----
playerId
playerName

joinPlayerGame
-----
joinId
playerId
gameId

games
-----
modify the player score fields to just be 'score'

SELECT g.*, p.playerName FROM players p INNER JOIN joinPlayerGame j ON j.playerId = p.playerId INNER JOIN games g ON g.<whatever your key is> = j.gameId ORDER BY g.score DESC LIMIT 10