我正在使用PHP MySQLi
准备好的语句进行查询
$stmt = $dbconnect->prepare("
SELECT COUNT(r.review_id)
, p.postid
, p.title
, p.tags
, p.ltags
, p.status
, p.timestamp
FROM njdb.post_review r
JOIN njdb.post_si p
WHERE r.postid REGEXP ?
AND r.review_status = 'a'
AND p.postid REGEXP ?
AND p.status = 'a';
");
$stmt->bind_param('ss',$search,$search);
$stmt->execute();
$stmt->bind_result($result_post_review, $result_postid, $result_title, $result_hashtags, $result_location, $result_status, $result_timestamp);
$search
是一个字符串,其值类似于id1|id2|id3|id4
此处有2 tables
post_si
和post_review
我希望上面的内容能够给我评论总数+帖子的详细信息。但我在WHERE
区域遇到问题,因为有些帖子没有任何评论,因此 AND post_review.review_status = 'a'
会导致一些问题。
我认为我真正需要的是使用条件语句,但我没有在mysql中尝试if no reviews its ok just get the details of the post and move on to the next post
我该怎么做?谢谢!
答案 0 :(得分:2)
您需要使用LEFT JOIN
来获取没有匹配评论的帖子。您还需要一个适当的加入条件,将帖子与他们的评论联系起来。还有一个GROUP BY
子句用于通过发布获得计数,否则你将一切都归结为一个结果。
SELECT COUNT(r.review_id)
, p.postid
, p.title
, p.tags
, p.ltags
, p.status
, p.timestamp
FROM njdb.post_si p
LEFT JOIN njdb.post_review r ON r.postid = p.postid AND r.review_status = 'a'
WHERE p.postid REGEXP ?
AND p.status = 'a'
GROUP BY p.postid;