2010-03-16 95 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關鍵字有什麼問題?