【发布时间】:2018-10-03 18:08:48
【问题描述】:
我在 SELECT 语句中使用 WHERE 和 AND 命令提取特定数据时遇到问题。这个问题如下:
我有一张名为“solo_leaderboard”的表格。正是在这张表中,我存储了游戏俱乐部中所有游戏的高分值。我想把所有的高分都保留在这个表中,因为为每个游戏创建一个单独的表似乎很荒谬。我使用此表填充 HTML 页面,显示每场比赛的前 5 名得分。一个人一次只能在每场比赛中进入前 5 名。到目前为止,这部分效果很好。
我的主要问题是我的代码仅从整个表中提取一个人的高分,并且仅在适用于所述游戏时才显示它。例如,一个人在 Sega Dreamcast 的 Crazy Taxi 中的最高分是 3111,因此他们在 Atari 的 Freeway 中的高分 18 不会显示在 Freeway 列表中,即使他们在 Freeway 列表中排名第二。
我不希望一个人多次出现在同一个排行榜上,但我确实希望他们出现在其他排行榜上。
这是我的表架构和相应的 php 代码:
- id - int(10)
- 游戏系统 - varchar(30)
- 游戏 - varchar(30)
- 名称 - varchar(40)
- 分数 - int(10)
- 日期 - 日期
- gradelevel - varchar(5)
- whois - 枚举
$result = mysqli_query($conn,"SELECT * FROM solo_leaderboard x WHERE game LIKE '%Freeway%' AND score >= ALL (SELECT score FROM solo_leaderboard y WHERE y.name=x.name AND score>0) ORDER BY score DESC LIMIT 5");
【问题讨论】:
-
SELECT * FROM solo_leaderboard x WHERE game LIKE '%Freeway%' ORDER BY score DESC LIMIT 5- 这还不够吗?使用时什么不起作用? -
如果我对排行榜上的重复没问题,那就太好了。如果 A 人在同一个排行榜上获得前 3 名,我只想查看他们的最高分。我发现一个特别好的学生可以自己填满前 5 名,我喜欢让其他学生上榜。
-
哦,我明白了 - 我误会了,我以为表格只包含每个玩家在每场比赛中的最高分。它实际上是否包含所有记录的分数?在这种情况下,您可以使用
MAX和GROUP BY。 -
我的意思是:
SELECT name, MAX(score) AS 'max_score' FROM solo_leaderboard x WHERE game LIKE '%Freeway%' ORDER BY (MAX(score)) GROUP BY name LIMIT 5。 (抱歉,如果这不完全正确,我不擅长 SQL,但这样的事情应该可以工作。如果那是错误的,我相信其他人会纠正我 :))