【问题标题】:Trying to take an average of a column with three inner join tables MySQL尝试对具有三个内部连接表 MySQL 的列进行平均
【发布时间】:2016-12-07 18:02:14
【问题描述】:

我试图在我的rating 表中获得rate 列的平均评分。在查找了很多方法来做到这一点之后,似乎没有什么对我有用。但是,如果我不尝试取平均值,它确实有效。

这是我的代码(尝试 1):

    $sql = "SELECT * FROM users 
           INNER JOIN mentor ON users.id = mentor.id 
           INNER JOIN (SELECT AVG(rating.rate) AS average 
           FROM rating GROUP BY rating.owner) 
           ON mentor.id = rating.owner ORDER BY RAND()";

这是我的代码(尝试 2):

   $sql = "SELECT users.id, users.username, 
           mentor.industry, mentor.city,  
           AVG(rating.rate) AS average FROM users 
           INNER JOIN mentor ON users.id = mentor.id 
           INNER JOIN rating ON mentor.id = rating.owner
           ORDER BY RAND()";

SELECT 语句后面的代码是这样的:

$res = mysqli_query($db,$sql) or die(mysqli_error());               
if (mysqli_num_rows($res)>0) {
    while ($row=mysqli_fetch_assoc($res)){
        $variable= $row['column'];
// more variable naming
   }
}

每当我重新加载我的页面时,它都是完全白色的。控制台日志显示“加载资源失败:服务器响应状态为 404(未找到)”。不太确定下一步该做什么。感谢您的任何意见,建议!

owner列是=mentor.id = users.id

【问题讨论】:

  • 404消息与SQL无关。你怎么称呼这个查询?
  • @EatPeanutButter select语句后面的代码是这样的:$res = mysqli_query($db,$sql) or die(mysqli_error()); if (mysqli_num_rows($res)>0) { while ($row=mysqli_fetch_assoc($res)){ $variable = $row['column'];

标签: mysql inner-join average


【解决方案1】:

您有几个问题需要解决。问题是您收到 404。请尝试确保您请求的页面正确。

第二个问题是您的 SQL 查询,这是完全错误的。您尝试在没有grouping 的情况下获取记录数据并聚合,这会引发错误。第二次尝试更接近正确的解决方案,所以让我们从那里开始。这是尝试:

SELECT users.id, users.username, 
           mentor.industry, mentor.city,  
           AVG(rating.rate) AS average FROM users 
           INNER JOIN mentor ON users.id = mentor.id 
           INNER JOIN rating ON mentor.id = rating.owner
           ORDER BY RAND()

尝试在您的 RDBMS 中按原样运行此查询。你会得到一个错误。您需要按用户group 结果,因此用户数据将汇总,并且由于导师正在给予评分,您不能select 导师,但您可以select 平均rating,然后@987654328 @users

SELECT users.id, users.username, 
           AVG(rating.rate) AS average FROM users 
           INNER JOIN mentor ON users.id = mentor.id 
           INNER JOIN rating ON mentor.id = rating.owner
           group by users.id, users.username
           ORDER BY RAND()

【讨论】:

  • 这很好用!!我非常感谢你的帮助!我非常努力,这对我来说是一个很好的学习课程。非常感谢!
  • @Millica,不客气,我很高兴能为您提供帮助。
  • 再次感谢您的帮助!我还有一个小问题要问你。我正在尝试在ORDER BY RAND() 之前添加一个where 子句。你对如何做到这一点有什么建议吗?这是我到目前为止所拥有的:WHERE mentor.mentor_enabled='1',但它似乎不起作用。提前致谢!
  • where 子句必须在语法上出现在组之前,正如文档所说 (dev.mysql.com/doc/refman/5.7/en/select.html)。所以你将有 select ... from ... inner join ... inner join ... where ... group by ... order by ...
  • 你是明星!!谢谢!并感谢您的链接!
猜你喜欢
  • 1970-01-01
  • 2020-07-29
  • 2016-03-30
  • 1970-01-01
  • 2018-07-15
  • 2012-09-26
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
相关资源
最近更新 更多