2012-10-10 82 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