2014-07-01 16 views
0

我使用下面的查詢來計算,並在一些測驗前3的平均得分從所有網站用戶的

$query = 'SELECT AVG(answer) FROM quiz_answers WHERE id_user = '.$id_user.''; 
$averagescore = mysql_query($query, $conn) or die(mysql_error()); 
$row = mysql_fetch_array($averagescore); 

echo number_format($row['AVG(answer)'],3); 

這部分工作正常顯示用戶平均得分,但是接下來的這個個人信息,我會也想展現我們所有的網站的用戶的前3名的平均分數,像名氣小禮堂......

我曾嘗試下面的代碼:

$queryall = 'SELECT * FROM quiz_answers WHERE id_user IN (SELECT id_user FROM quiz_answers GROUP BY id_user HAVING COUNT(id_user) > 1)' 

$groupresultsbyuser = mysql_query($query, $conn) or die(mysql_error()); 
$rows = mysql_fetch_array($groupresultsbyuser); 
$numberofrowsperuser = mysql_num_rows($groupresultsbyuser); 

我在這裏停留..請幫助我找到一種使其工作的方法。

+1

什麼是d B結構?表格如何連接? – user4035

+0

你只想要分數,還是你想要相關的用戶信息? –

+0

@PatrickQ相關的用戶信息將會很棒,但我希望至少能夠讓最好的3個分數顯示出來...... –

回答

1

假設你想要顯示一些用戶(例如用戶名)以及高分,你可以通過用戶拉出平均分數,然後加入你的用戶表(爲了論證,我「M調用users,並假設它有一個user_id場)

SELECT u.*, scores.avgScore 
FROM users u 
    JOIN (
     SELECT id_user, AVG(answer) AS avgScore 
     FROM quiz_answers 
     GROUP BY id_user 
     ORDER BY avgScore DESC LIMIT 3 
    ) scores ON u.id_user = scores.id_user 

DEMO

+0

謝謝你的回答,但這不起作用。 'user'表和'quiz_answers'表共有'id_user'列。我們基本上需要從quiz_answers表中選擇具有相同user_id的行,併爲每個用戶創建一個平均值。那麼只需從「用戶」表中選擇最大的3個平均得分和他們的通訊用戶名即可...... –

+0

作爲您提出的問題的第一條評論,您應該顯示您的表結構。你說的「不起作用」是什麼意思?如果'users'表上的id字段是'id_user'而不是'user_id',那麼只需在查詢中進行更改即可。由於我不知道你的確切表格結構是什麼,我不得不做出一些假設/猜測。 –

+0

@KlaussGekker我已經給我的答案添加了一個演示,以顯示它的工作。 –

1

試試這個:

SELECT id_user,AVG(answer) 
FROM quiz_answers 
GROUP BY id_user 
ORDER BY AVG(answer) DESC 
LIMIT 3