是否有可能获得围绕特定匹配的结果的一系列结果?

时间:2012-06-05 23:29:05

标签: mysql

我意识到我可以在代码中执行此操作,但我很好奇是否有一种直接的SQL方式来选择(例如)10个结果以及查询匹配的结果...

所以,假设我有一个玩家数据库,所有玩家都得分,我想向用户展示5个玩家,他们的得分落后于他们和5个未来...所以,我选择了他们的行,但现在我应该只需使用或在where子句中说出类似......

select score as selectedScore from player_scores where playerId = xxxx
or (score > selectedScore - 5 and score < selectedScore + 5)

我意识到这意味着所有分数都是按照确切的顺序排列,我会修改查询以从这些分数中提取userIds,所以这只是一个伪示例。

我怀疑这会起作用,但这是解决这个问题的正确方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用UNION组合使用ORDER BYLIMIT的两个查询分别选择下一个5和前一个5;通过在每个查询中使用自联接,可以找到与所需玩家的分数相邻的所有其他玩家(这假设playerId中的player_scores是唯一的):

(
  SELECT   p1.playerId, p1.score
  FROM     player_scores AS p1 JOIN player_scores AS p2 ON p1.score >= p2.score
  WHERE    p2.playerId = ?
  ORDER BY p1.score ASC
  LIMIT    6
) UNION ALL (
  SELECT   p1.playerId, p1.score
  FROM     player_scores AS p1 JOIN player_scores AS p2 ON p1.score <  p2.score
  WHERE    p2.playerId = ?
  ORDER BY p1.score ASC
  LIMIT    5
)