值我有一個表,如下所示:有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";
這可以通過當前登錄的用戶評分(單一評分)對其進行排序。
後你已經嘗試了查詢,一些示例數據,並將結果/預期結果 –