我想加入 rating
基于 postid
另一张table。
我已经创建了这个代码来计算 rating
平均值,有效:
SELECT post_rating.postid,
AVG(post_rating.rating)
FROM post_rating
GROUP BY post_rating.postid"
但是,当我尝试加入时,它不起作用,如下所示:
$join = ' LEFT JOIN ('SELECT post_rating.postid,
AVG(post_rating.rating)
FROM post_rating
GROUP BY post_rating.postid') AS post_rating
ON post_rating.postid=theList.id';
我该如何加入这个代码或者有更好的方法吗?谢谢您!
我使用的整个代码:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=myDB', 'root', 'root');
$select = 'SELECT theList.id, theList.name, post_rating.rating, post_rating.postid';
$from = ' FROM theList';
$where = ' WHERE TRUE';
$join = ' LEFT JOIN ('SELECT post_rating.postid, AVG(post_rating.rating) FROM post_rating GROUP BY post_rating.postid') AS post_rating ON post_rating.postid=theList.id';
$opts = isset($_POST['filterOpts'])? $_POST['filterOpts'] : array('');
if (in_array("pub", $opts)){
$where .= " AND pub = 1";
}
if (in_array("bar", $opts)){
$where .= " AND bar = 1";
}
if (in_array("restaurant", $opts)){
$where .= " AND restaurant = 1";
}
if (in_array("club", $opts)){
$where .= " AND club = 1";
}
$sql = $select . $from . $join . $where;
$statement = $pdo->prepare($sql);
$statement->execute();
$results = $statement->fetchAll(PDO::FETCH_ASSOC);
$json = json_encode($results);
echo($json);
?>
以下是我的表格的简化版本:
过帐表
id | postid | rating
--------------------
1 | 3 | 5
2 | 3 | 4
3 | 1 | 3
列表
id | name
----------
1 | name1
2 | name2
3 | name3
我想说的是:
id | name | rating
------------------
1 | name1 | 3
2 | name2 | 0
3 | name3 | 4.5
2条答案
按热度按时间i7uaboj41#
我认为你正在以一种不必要的复杂方式处理这个问题。简单地做
Left Join
在table之间,考虑一下theList
作为最左边的表,并计算Avg()
在路边的一个小组里postid
:您的php代码如下所示:
sr4lhrrt2#
现在我看到你在之前的问题评论中试图告诉我的问题,你已经结束了
$join
字符串,所以大部分查询不会被包括在内所以这条线
(见代码颜色显示错误)
所以修正为
我可以建议您将异常处理添加到pdo中,以便在出现错误时在浏览器上得到通知。在连接代码中执行此操作