PHP / MySQL连接声明

迈克尔·法西利亚

我正在尝试使用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',
戴夫·齐奇(Dave Zych)

您的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章