2011-08-16 30 views
0

值我有一個表,如下所示:有4列得到一些線路的平均單行在MySQL

ID - username - rating - solved 

的DB是一個謎網站。 ID是拼圖的#,username字段是爲解決它的用戶,solved是一個布爾值,如果用戶已經解決了它。在主頁上,我列出了謎題。我從其他表中獲得了謎題的數據,這是解決登錄用戶謎題的值,但是當我嘗試獲得平均評級時,它將平均一個值,登錄用戶對謎題的評分,並忽略拼圖的任何其他評分。這可以在一個單一的查詢中完成,或者只有兩個單獨的查詢完成?怎麼樣?
另外,如果沒有用戶登錄,這意味着我不需要從收視率表中獲得solved值,收視率是平均值,一切正常。

編輯:這裏是代碼。 $ logged是如果用戶登錄的,所以前兩個查詢工作,最後兩個查詢不工作。

if ($logged) { 
    $query_recent = "SELECT id, owner, title, hidden, x, y, solved, points, AVG(rating) AS average FROM `users`, `cwords` LEFT JOIN `ratings` ON `cwords`.`id`=`ratings`.`cw_id` AND `ratings`.`owner_id` = '$username' WHERE `cwords`.`public` = 1 AND `owner` = `username` GROUP BY `id` ORDER BY `id` DESC LIMIT $from, 30"; 
    $query_top = "SELECT id, owner, title, hidden, x, y, solved, points, AVG(rating) AS average FROM `users`, `cwords` LEFT JOIN `ratings` ON `cwords`.`id`=`ratings`.`cw_id` AND `ratings`.`owner_id` = '$username' WHERE `cwords`.`public` = 1 AND `owner` = `username` GROUP BY `id` ORDER BY average DESC LIMIT $from, 30"; 
    } else { 
    $query_recent = "SELECT id, owner, title, hidden, x, y, points, AVG(rating) AS average FROM `users`, `cwords` LEFT JOIN `ratings` ON `cwords`.`id`=`ratings`.`cw_id` WHERE `cwords`.`public` = 1 AND `owner` = `username` GROUP BY `id` ORDER BY `id` DESC LIMIT $from, 30"; 
    $query_top = "SELECT id, owner, title, hidden, x, y, points, AVG(rating) AS average FROM `users`, `cwords` LEFT JOIN `ratings` ON `cwords`.`id`=`ratings`.`cw_id` WHERE `cwords`.`public` = 1 AND `owner` = `username` GROUP BY `id` ORDER BY average DESC LIMIT $from, 30"; 
    }; 

編輯2:我有2個查詢嘗試過,但如果我嘗試在一個單獨的一個選擇solved值我不能由AVG(rating)爲了它,我回到原來的問題。任何幫助?

$query_top_solved = "SELECT id, solved FROM cwords LEFT JOIN ratings ON `cwords`.`id`=`ratings`.`cw_id` AND `ratings`.`owner_id` = '$username' WHERE `cwords`.`public` = 1 GROUP BY cw_id ORDER BY AVG(rating) DESC LIMIT $from, 30"; 

這可以通過當前登錄的用戶評分(單一評分)對其進行排序。

+2

後你已經嘗試了查詢,一些示例數據,並將結果/預期結果 –

回答

1

您需要兩個單獨的查詢。一個獲取用戶的分數,一個獲取總體平均分數。

SELECT rating, solved 
FROM ... 
WHERE username=$userID AND ID=$puzzleID 

SELECT AVG(rating), AVG(solved) 
FROM ... 
WHERE ID=$puzzleID 
+0

和我怎麼在'while'循環重複這些,使值去正確的謎題? –

+0

我試過了,編輯了問題。 –