Php MySQL:选择一个获胜者,返回他们的排名

Php MySQL:选择一个获胜者,返回他们的排名,php,mysql,where,Php,Mysql,Where,早些时候我问过,基本上是问如何在一张有很多获奖者的表格中根据他们的分数列出10名获奖者 答案是这样的 现在,我想在表格中搜索一个给定的赢家X,并找出他所处的位置,当表格按点数排序时 例如,如果这是表: Winners: NAME:____|__POINTS: Winner1 | 1241 Winner2 | 1199 Sally | 1000 Winner4 | 900 Winner5 | 889 Winner6 | 700 Winner7 | 667

早些时候我问过,基本上是问如何在一张有很多获奖者的表格中根据他们的分数列出10名获奖者

答案是这样的

现在,我想在表格中搜索一个给定的赢家X,并找出他所处的位置,当表格按点数排序时

例如,如果这是表:

     Winners:
NAME:____|__POINTS:
Winner1  |  1241
Winner2  |  1199
Sally    |  1000
Winner4  |  900
Winner5  |  889
Winner6  |  700
Winner7  |  667
Jacob    |  623
Winner9  |  622
Winner10 |  605
Winner11 |  600
Winner12 |  586
Thomas   |  455
Pamela   |  434
Winner15 |  411
Winner16 |  410
以下是我想做的事情的可能输入和输出:

Query:  "Sally", "Winner12", "Pamela", "Jacob"
Output: 3        12          14        623
我该怎么做?是否可以只使用MySQL语句?还是我也需要PHP

这就是我想要的东西:

WHEREIS FROM Winners WHERE Name='Sally' LIMIT 1
想法


编辑-注意:您不必处理两位获奖者分数相同的情况,为简单起见,假设这不会发生。

我认为这将为您提供所需的结果。请注意,我正确地处理了目标获胜者与另一获胜者平分的情况。两人的职位相同

SELECT COUNT(*) + 1 AS Position
FROM myTable
WHERE Points > (SELECT Points FROM myTable WHERE Winner = 'Sally')
编辑: 我想插入伊格纳西奥·巴斯克斯·艾布拉姆斯的答案,从几个方面来看,这比上面的答案要好。 例如,它允许列出所有或几个获胜者及其当前位置。 另一个优点是,它允许表达一个更复杂的条件,以表明给定的玩家领先于另一个,请参见下文。读到incrediman的评论,大意是不会有联系,这促使我研究这个问题;查询可以稍微修改如下,以处理玩家拥有相同点数的情况,这些玩家以前会获得相同的位置值,现在位置值进一步绑定到他们的相对起始值

SELECT w1.name, (
  SELECT COUNT(*)
  FROM winners AS w2
  WHERE (w2.points > w1.points) 
     OR (W2.points = W1.points AND W2.Start < W1.Start)  -- Extra cond. to avoid ties.
)+1 AS rank
FROM winners AS w1
-- WHERE W1.name = 'Sally'   -- optional where clause

我想这会让你得到想要的结果。请注意,我正确地处理了目标获胜者与另一获胜者平分的情况。两人的职位相同

SELECT COUNT(*) + 1 AS Position
FROM myTable
WHERE Points > (SELECT Points FROM myTable WHERE Winner = 'Sally')
编辑: 我想插入伊格纳西奥·巴斯克斯·艾布拉姆斯的答案,从几个方面来看,这比上面的答案要好。 例如,它允许列出所有或几个获胜者及其当前位置。 另一个优点是,它允许表达一个更复杂的条件,以表明给定的玩家领先于另一个,请参见下文。读到incrediman的评论,大意是不会有联系,这促使我研究这个问题;查询可以稍微修改如下,以处理玩家拥有相同点数的情况,这些玩家以前会获得相同的位置值,现在位置值进一步绑定到他们的相对起始值

SELECT w1.name, (
  SELECT COUNT(*)
  FROM winners AS w2
  WHERE (w2.points > w1.points) 
     OR (W2.points = W1.points AND W2.Start < W1.Start)  -- Extra cond. to avoid ties.
)+1 AS rank
FROM winners AS w1
-- WHERE W1.name = 'Sally'   -- optional where clause

我想你的意思是在积分>的地方…+1实际上,永远不会有两个赢家拥有相同的位置,因为他们首先按积分排序,然后开始,开始是唯一的。我的select 10查询如下所示,例如:从Winners ORDER BY Points DESC中选择*,再开始学习,然后进行尝试。这很有效;谢谢但有一件事——一旦我有了位置,我如何才能用PHP将其输入到变量中?啊,别客气。与往常一样,fetch_array etcI我想你的意思是在积分>的地方…+1实际上,永远不会有两个赢家拥有相同的位置,因为他们首先按积分排序,然后开始,并且开始是唯一的。我的select 10查询如下所示,例如:从Winners ORDER BY Points DESC中选择*,再开始学习,然后进行尝试。这很有效;谢谢但有一件事——一旦我有了位置,我如何才能用PHP将其输入到变量中?啊,别客气。与通常的获取数组等方法相同