我正在尝试使用Mysql AVG
创建商店列表的平均评分,然后在目录列表页面上显示每个商店旁边的平均值。
每当有人对商店进行评论时,他们会给出1-5的评分,该评分会插入TABLE reviews
栏中的rating
商店数据来自TABLE reviews
,表关系来自两个名为store_id
的表中的列。我尝试使用join语句来显示每个商店旁边的平均值。
这是使用join语句评级的循环中的当前代码:
<?php echo "<table>\n";
echo "<tr><th>Store ID</th><th>Rating</th></tr>\n";
$result1 = mysql_query("SELECT s.store_id AVG(r.rating) AS avg_rating
FROM stores as s
JOIN reviews as r ON s.store_id = r.store_name
GROUP BY s.store_id");
while ($row1 = mysql_fetch_assoc($result1)) {
echo "<tr><td>$row1[store_id]</td><td>$row1[avg_rating]</td></tr>\n";
}
echo "</table>\n";?>
echo "</table>\n";?>
这是我得到的SQL错误
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(r.rating) AS avg_rating FROM stores'
这是我得到的PHP错误:
警告:mysql_fetch_assoc()期望参数1为资源,第227行/home/shopping/public_html/retailers.php中给出布尔值
第227行是上面代码中的这一行:
while ($row1 = mysql_fetch_assoc($result1)) {
这些是我的表2结构:
CREATE TABLE `stores` (
`store_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`store_name` varchar(255) NOT NULL DEFAULT '',
CREATE TABLE `reviews` (
`rating_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`store_id` int(11) NOT NULL DEFAULT '0',
`rating` tinyint(1) NOT NULL DEFAULT '0',
答案 0 :(得分:3)
您的SQL查询无效。您需要从查询中省略s.store_name
或将其包含在GROUP BY
SELECT
s.store_id,
s.store_name,
AVG(r.rating) AS
FROM stores as s
JOIN reviews as r ON s.store_id = r.store_id
GROUP BY s.store_id, s.store_name