Php 获取MySQL中一些行的平均值和一行的值

Php 获取MySQL中一些行的平均值和一行的值,php,mysql,database,Php,Mysql,Database,我有一个4列的表,如下所示: ID - username - rating - solved DB是一个益智网站。ID是谜题的#;username字段用于解决谜题的用户,如果用户已经解决了,则solved是一个布尔值。在主页上,我列出了谜题。我获得了拼图的数据(从另一个表中),即登录用户的拼图已解决值,但当我尝试获得平均评分时,它会平均一个值,即登录用户对拼图的评分,并忽略该拼图的任何其他评分。这可以在一个单一的查询中完成,还是仅在两个单独的查询中完成?怎么做? 哦,另外,如果没有用户登录,这

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

ID - username - rating - solved
DB是一个益智网站。
ID
是谜题的#;
username
字段用于解决谜题的用户,如果用户已经解决了,则
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:我尝试了两次查询,但如果我尝试在单独的查询中选择
已解决的
值,我无法按
平均值(评级)
排序,我又回到了原来的问题。有什么帮助吗

$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


发布您尝试过的查询、一些示例数据和结果/预期结果,以及如何在
while
循环中重复这些内容,以便将值转到正确的谜题?
SELECT AVG(rating), AVG(solved)
FROM ...
WHERE ID=$puzzleID