发布高分和检索位置

时间:2010-03-16 18:04:29

标签: php mysql

我对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的内容,但我仍然需要进行第二次查询以获得这些结果。

4 个答案:

答案 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关键字有什么问题?