2012-10-10 38 views
-1

表比較:獲得最高分在同一個ID,然後用其他ID

======================================== 
|id| document_id | sentence_id | score | 
======================================== 
|1 | 3   |  1  | 0.324 | 
|2 | 3   |  2  | 0.201 | 
|3 | 5   |  1  | 0.181 | 
|4 | 5   |  2  | 0.402 | 
======================================== 

我想獲得每document_id最高得分,然後比較與其他document_id的結果。我的目標是獲得document_id. so from the example, the result must be 5 3

$q = mysql_query("SELECT document_id, MAX(score) as max_score FROM `tb_score` GROUP BY document_id "); 
while ($row = mysql_fetch_array($q)) { 
    $min = $row['max_score']; 
} 

序列我仍然得到錯誤的結果。請幫幫我。

+4

「我仍然得到錯誤的結果」不幫助我們診斷問題。你應該發佈你的確切結果(可能與你的確切數據集)和你的預期結果,所以我們可以比較和對比。 – FrankieTheKneeMan

回答

1

You can't use aliasin ORDER BY。所以你必須在ORDER BY中使用MAX(score)。就像這樣:

SELECT document_id ,MAX(score) as Highscore 
FROM tb_score 
GROUP BY document_id 
ORDER BY MAX(score) DESC; 

或使用子查詢,你可以這樣做。

SELECT * FROM 
(
SELECT document_id ,MAX(score) as Highscore 
FROM tb_score 
GROUP BY document_id 
) A 
ORDER BY Highscore DESC; 

See this SQLFiddle

+1

感謝您的SQLFIDDLE! – Gopesh

1

你似乎描述的SQL是:

SELECT document_id 
     , MAX(score) as max_score 
    FROM tb_score 
    GROUP BY document_id 
    ORDER BY MAX(score) DESC --or max_score, I'm not sure which MySQL will accept. 

這是否幫助?

旁白:MySQL擴展名在PHP中不推薦使用,您應該使用MySQL ImprovedPHP Data Objects來完成這項工作。

1

SQL必須是這樣的。

SELECT document_id, MAX(score) as max_score 
FROM `tb_score` GROUP BY document_id 
ORDER BY max_score DESC