我的表格中有2个帖子可以在主页上发布。首先有3条评论,另一条没有评论。下面的查询给出了1个结果行,但我想要2个结果行。
查询的预期结果
我的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';
答案 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打败了,所以我将其留给其他答案。