MySQL选择查询内部连接表,其中2个正则表达式针对不同的表

时间:2013-12-26 15:02:33

标签: php mysql regex mysqli

我正在使用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_sipost_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我该怎么做?谢谢!

1 个答案:

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