我正在尝试使用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错误
您的SQL语法有误。检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以便在“(r.rating)AS avg_rating FROM存储区”附近使用
这是我得到的PHP错误:
警告:mysql_fetch_assoc()期望参数1为资源,在第227行的/home/shopping/public_html/retailers.php中提供布尔值
上面的代码来自第227行:
while ($row1 = mysql_fetch_assoc($result1)) {
这是我表的两个结构:
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',
您的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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句