我有一个名为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中回应它
你试过这个:
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();
?>
您可以使用左连接从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;