2010-03-16 37 views
2

我对MYSQL并不是很了解,所以我提前道歉,这是一个愚蠢的问题。发表高分和检索位置

我创建了一个超级基本的PHP高分表。在数据库表格中插入新分数后,我想检索该分数的位置,以便我可以得到10个结果,并且人员分数落入该范围内。

我插入查询看起来像:

$stmt = $mysqli->prepare("INSERT INTO highscores (name, time, score) VALUES (?, ?, ?)"); 
$stmt->bind_param('sdi', $name, $time, $score); 

UPDATE - 我在寻找一种方法以尽可能少的查询尽可能地做到这一点。我记得读过一些关于在插入时获取INSERT ID的信息,但是我仍然需要进行第二次查询才能获得这些结果。

+0

你是指“该分数的位置”是什么意思?数据库表中的位置? “......属于这个范围。”什么范围,你ony添加一个新的分数? – 2010-03-16 18:57:55

+0

啊,好问题。我的意思是位置,因为它与分数有关。所以1st会有最高分,持续最低。 – majman 2010-03-16 21:13:22

回答

6

要得到谁的得分比目前的成绩更好的人数:

SELECT COUNT(*) FROM table_name的 WHERE分数> $得分

因此,你的排名会在比分1 + mysql_result($result, 0)第位。

+0

这可以结合成一个声明吗?还是我必须做一个单独的查询? – majman 2010-03-16 18:12:12

+0

要抓住当前位置旁边的10个分数,然后找到位置?我的方法是首先获取该排名,然后再继续查询表中的10个或更多记录。 – 2010-03-16 18:16:22

2

“...但我仍然必须作出 秒查询来获得这些结果。”

为了得到你的结果,你不需要做INSERT 1st,你可以在不插入行的情况下得到这些结果。 正如乔Mejewski建议,你可以这样做:

$query = "SELECT COUNT(*) FROM highscores WHERE score > '" . $score . "'"; 

如果再要插入的行,你需要一个第二个查询。

“我正在寻找一种方法来尽可能少地查询 !”

反正你需要两个查询并获得最后插入的ID(至极,我不明白,如果你放在一个自动增量ID在你的高分表)woudn't帮助你,因为你并不需要获得ID或一行,但所有行的分数高于插入的行数。

你的评论:“...所以第一个会有最高分, 持续最低。”

如果你想取回按分数排序表,因此第一次将具有最高得分,最后是最低的,你只需要调用此查询您插入新行后:

SELECT * FROM highscores ORDER BY score DESC 

就是这样!

+0

感谢Marco - 你让我走上正轨! – majman 2010-03-17 14:19:19

0

我打算出去走一走,说没有办法用一个查询来做到这一点。所以最少的SQL语句,我认为这个问题的目的是2,一个插入一个,一个查询。

0

使用LIMIT关键字有什么问题?