MySQL查询同时合并来自2个表的结果(如果count()也为零则获取)

时间:2015-02-04 09:12:09

标签: mysql sql

我的表格中有2个帖子可以在主页上发布。首先有3条评论,另一条没有评论。下面的查询给出了1个结果行,但我想要2个结果行。

查询的预期结果

  1. 从博客表中提取请求的行
  2. 获取相关帖子ID的COUNT条评论。如果没有可用的评论,则输出应为0。
  3. 我的2张桌子的简化形式

    structure               values                  expected query output   current query output
    ====================    ====================    =====================   =====================
    blog    |   comments    blog    |   comments    1 - body1 - 3 comments  1 - body1 - 3 comments
    --------------------    --------------------    2 - body2 - 0 comments
    id      |   commentid       1   |   1
    body    |   comment     body1   |   comment1
                postid          2   |   1
                            body2   |   2
                                    |   comment2
                                    |   1
                                    |   3
                                    |   comment3
                                    |   1
    

    我的查询无法使用此表单?

    你能纠正我吗。

    $query = 'SELECT 
    blog.id, 
    blog.body, 
    COUNT(comments.postid)
    FROM 
    blog, comments 
    WHERE 
    blog.status="publish" AND comments.postid = blog.id 
    ORDER BY blog.id DESC';
    

4 个答案:

答案 0 :(得分:1)

乍一看,您可能需要左连接:。

编辑:确认。看看这个:http://sqlfiddle.com/#!2/1475ab/1

$query = 'SELECT 
b.id, 
b.body, 
COUNT(c.comment)
FROM blog b
left join comments c
on b.id = c.postid
WHERE blog.status="publish"
group by b.id
ORDER BY b.id DESC';

答案 1 :(得分:1)

left join会返回博客,即使他们没有匹配的评论:

select  b.id
,       b.body
,       count(c.commentid)
from    blog b
left join
        comments c
on      b.id = c.blogid
where   b.status = 'publish'
group by
        b.id
,       b.body
order by
        b.id desc

答案 2 :(得分:1)

在此处使用左连接,例如: -

SELECT blog.id, blog.body, COUNT(comments.postid)
FROM blog LEFT JOIN comments 
ON comments.postid = blog.id 
WHERE blog.status="publish" 
GROUP BY blog.id, blog.body
ORDER BY blog.id DESC';

答案 3 :(得分:1)

首先澄清你的表格,这就是你所拥有的:

Table: blog
id | body
---+-------
1  | body1
2  | body2

Table: comments
commentid | comment  | postid
----------+----------+---------
1         | comment1 | 1
2         | comment2 | 1
3         | comment3 | 1

所以查询的问题是它的内连接,只返回两个表中都存在行的结果。

您需要使用博客中的左连接进行评论。

虽然看起来我已经被实际的sql打败了,所以我将其留给其他答案。