从另一个表PHP / SQL中选择平均值时,如何从一个表中选择所有表?

问题描述 投票:1回答:2

我有一个名为dining_listings的表。此表具有自动增量主键,用作其标识引用。与此同时,我还有另一张名为dining_reviews的表,其中包含dining_listings表的评论和评分。 dining_listings表的id与dining_reviews表的place_id相对应。

如果dining_listings表的id为7,则dining_reviews表中的place_id列可以有多个7。

 +----------+-----------+--------------
 id           name        city
 +----------+-------------+--------------
 1            wok house    cityville
 +----------+-------------+--------------
 2            tastyXpress  townsville
 +----------+-------------+--------------

dining_reviews表:

 +-----------+-----------+----------------
 id           place_id     overall_rating
 +-----------+-----------+----------------
 1            2            5
 +-----------+-----------+----------------
 2            2            4

我想我会对这两个表使用“左连接”。但我想从一个表中选择所有表,同时从另一个表中选择列的平均值。

接下来的挑战是在PHP中回应它

php sql left-join
2个回答
1
投票

你试过这个:

mysqli_query($con, "SELECT d.id, d.name, d.city, AVG(l.column) FROM dining_listings d LEFT JOIN dining_reviews l on d.id=l.place_id");

// $con is the connection variable ... $con = mysqli_connect(...

你说:

当我尝试类似的东西时

 while($row = $stmt->fetch_object())
{
      echo $row->id;  
      echo $row->name;
      echo $row->rating
}

我从PHP收到了一个关于boolean的“fetch_object()”错误消息

这是一个工作示例:

// If you still get a boolean after trying this then the problem is in the query
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "databaseName");

$query = "SELECT d.id, d.name, d.city, AVG(l.column) FROM dining_listings d LEFT JOIN dining_reviews l on d.id=l.place_id";

if ($result = $mysqli->query($query))
{
    // fetch object array
    while ($row = $result->fetch_object())
    {
        echo $row->id;   // You should now be able to see the output
        echo $row->name;
        echo $row->rating
    }

// free result set
$result->close();
}

// close connection
$mysqli->close();
?>

0
投票

您可以使用左连接从dining_listings表中选择所有,并从另一个表overall_rating中平均dining_reviews,如下所示:

SELECT A.ID, A.NAME, A.CITY, AVG(B.OVERALL_RATING)
FROM
DINING_LISTINGS A
LEFT JOIN
DINING_REVIEWS B
ON A.ID = B.PLACE_ID
GROUP BY A.ID, A.NAME, A.CITY
ORDER BY AVG(B.OVERALL_RATING) DESC;
© www.soinside.com 2019 - 2024. All rights reserved.