php - MySQL中获取部分行的平均值和单行的值

标签 php mysql database

我有一个包含 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/

相关文章:

java - 如何拆分列表?

php - 只显示符合条件的结果

javascript - 从 php 编码的 json 检索数组并将其附加到 div 主体

php - 将 KML 文件加载到 mysql/xpath 和 x quires

c# - 性能 - 数据库查询和数据表查询

成为成员(member)后,PHP 链接到用户个人资料

php - 如何将 MySql 时间戳列更新为 PHP 上的当前时间戳?

PHP 函数循环检查数据库中是否存在字符串

php - 使用 ajax 在一页上提交多个独特的表单

php - 如何编写主表和副表的 SQL 多插入查询