所以我有一个包含联盟所有球队的数据库表。在网站的主页上,我需要展示团队的位置,两个团队有更好的积分(更多积分)和两个团队,其得分低于特定团队。最简单的部分是这个特定的团队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查询不太满意,请帮助,我被卡住了。
答案 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)];
}
}