我对MYSQL并不那么精明,所以我提前道歉这是一个愚蠢的问题。
我创建了一个超级基本的PHP High Scores表。在将新分数插入数据库表后,我想检索该分数的位置,以便我可以获得10个结果,其中人员分数在该范围内。
我的INSERT查询类似于:
$stmt = $mysqli->prepare("INSERT INTO highscores (name, time, score) VALUES (?, ?, ?)");
$stmt->bind_param('sdi', $name, $time, $score);
UPDATE - 我正在寻找一种方法来尽可能少地进行查询。我记得读过一些关于在插入时获取INSERT ID的内容,但我仍然需要进行第二次查询以获得这些结果。
答案 0 :(得分:6)
获得得分高于当前分数的人数:
SELECT COUNT(*) FROM table_name WHERE得分> $得分
因此,您排名的分数将在1 + mysql_result($result, 0)
位置。
答案 1 :(得分:2)
“......但我还是要做一个 获得这些结果的第二个查询。“
为了获得结果,您不需要执行INSERT 1st,您可以在不插入行的情况下获得这些结果。 正如Joe Mejewski所建议的那样,你可以这样做:
$query = "SELECT COUNT(*) FROM highscores WHERE score > '" . $score . "'";
如果那时你想要插入行,你需要第二个查询。
“我正在寻找一种方法来做到这一点 尽可能少的查询!“
无论如何你需要两个查询并获得最后一个插入的id(如果你在你的高分表中放置了一个自动增量id,我不明白)对你没有帮助,因为你不需要得到那个id或者一个单行,但所有行的得分都高于您插入的行。
你的评论:“......所以第一名得分最高, 最后一个。“
如果你想取回按分数排序的牌桌,那么第一张得分最高而最后一张得分最低,你只需要在插入新行之后调用 :< / p>
就是这样!SELECT * FROM highscores ORDER BY score DESC
答案 2 :(得分:0)
我打算走出困境说一条查询无法做到这一点。因此,我认为问题的方式最少的SQL语句将是2:一个用于插入,一个用于查询。
答案 3 :(得分:0)
使用LIMIT关键字有什么问题?