试图获取具有三个内部联接表MySQL的列的平均值

时间:2016-12-07 18:02:14

标签: mysql inner-join average

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

这是我的代码(尝试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

1 个答案:

答案 0 :(得分:0)

您有几个问题需要解决。问题是你得到404.尽量确保你要求正确的页面。

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

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 1}},然后group 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()