簡體   English   中英

獲取MySQL中一些行的平均值和單行的值

[英]Get the average of some lines and the value of a single line in MySQL

我有一個有 4 列的表,如下所示:

ID - username - rating - solved

DB 用於拼圖網站。 ID是拼圖的#, username名字段是解決它的用戶,如果用戶已經解決,則solved的是 boolean。 在主頁上,我列出了謎題。 我得到了謎題的數據(來自另一個表),為登錄用戶解決的謎題值,但是當我嘗試獲得平均評分時,它平均一個值,即登錄用戶對謎題的評分,並忽略拼圖的任何其他評級。 這可以在一個查詢中完成,還是只在兩個查詢中完成,一個單獨的評級? 如何?
哦,還有,如果沒有用戶登錄,這意味着我不必從評級表中獲取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 個查詢,但是如果我嘗試 select 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";

這將按當前登錄用戶的評分排序,單一個。

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM