基于足球队积分的特定ID上下两行

时间:2013-12-30 13:50:39

标签: php mysql

所以我有一个包含联盟所有球队的数据库表。在网站的主页上,我需要展示团队的位置,两个团队有更好的积分(更多积分)和两个团队,其得分低于特定团队。最简单的部分是这个特定的团队ID总是一样的(我只需要显示那个团队的当前位置)。

id | Name | Points
---|------|------
0  | Team1| 9
1  | Team2| 5
2  | Team3| 3
3  | Team4| 3
4  | Team5| 2
5  | Team6| 1

所以我想说我想要team3(ID 3),我要找的结果是

1. team1 9
2. team2 5
3. team3 3
4. team4 3
5. team5 2

我对mysql查询不太满意,请帮助,我被卡住了。

3 个答案:

答案 0 :(得分:1)

按点顺序进行查询。 然后在你开始一个var值为1之前; 每个循环为该变量添加1。

修改

SELECT * FROM teams
WHERE POINTS >= ((SELECT points FROM teams WHERE ID=3)-2)
ORDER BY points ASC LIMIT 0,3

答案 1 :(得分:1)

其他答案做某种循环结构;我更喜欢在SQL中处理整个事情:

SELECT * FROM (
  (SELECT * FROM teams
  WHERE POINTS >= (SELECT POINTS FROM teams WHERE ID=3)
  ORDER BY POINTS ASC LIMIT 0,3)
  UNION
  (SELECT * FROM teams
  WHERE POINTS < (SELECT POINTS FROM teams WHERE ID=3)
  ORDER BY POINTS DESC LIMIT 0,2)
) AS `teamResults` ORDER BY POINTS DESC

SQLFiddle:http://sqlfiddle.com/#!2/a17ad/10

以下是它的作用细分:

提前与2支队伍一起讨论该队伍。

与之联盟:

将2支球队直接置于我们所选球队的后面。

最后:

按点数降序整个结果。

答案 2 :(得分:0)

从表中选择所有内容,然后按点对结果进行排序。

然后创建一个包含所有团队名称的数组。

当你回应团队时,请执行以下操作:

for ($i = 0; $i < count(teams_array); $i++) {
   if (teams_array[$i]=='your_selected_team_name') {
       echo teams_array[(i+2)];
       echo teams_array[(i+1)];
       echo teams_array[i];
       echo teams_array[(i-1)];
       echo teams_array[(i-2)];
    }
}