PHP / MySQL Join语句不起作用

时间:2013-12-27 03:47:15

标签: php html mysql sql

我正在尝试使用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',

1 个答案:

答案 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