我有一个包含 4 列的表格,如下所示:
ID - username - rating - solved
数据库用于拼图网站。 ID
是谜题的编号,username
字段用于解决该谜题的用户,solved
是一个 bool 值(如果用户已解决)它。在主页上,我列出了谜题。我获取谜题的数据(从另一张表),即登录用户的谜题的已解决值,但是当我尝试获取平均评分时,它会平均一个值,即登录用户对谜题的评分,并忽略该谜题的任何其他评级。这可以在一个查询中完成,还是只能在两个查询中完成,一个单独的评级查询?怎么办?
哦还有,如果没有用户登录,这意味着我不必从评级表中获取已解决
值,评级会被平均,一切都会正常。
编辑:这是代码。 $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个查询,但如果我尝试在单独的查询中选择已解决
值,我无法按AVG(评级)
对其进行排序,我又回到了原来的问题。有什么帮助吗?
$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
关于php - MySQL中获取部分行的平均值和单行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7080937/