2010-12-08 217 views
0

我试图显示某个类别中的所有板,但是我遇到了SQL查询的问题。我希望它能够浏览某个类别中的所有帖子,从中获取用户标识,从users表中找到用户名,然后计算帖子中有多少条评论。数据库关系

这里的表和一些字段:

boards 
    board_id 

comments - the replies to the post 
    comment_id 

discussion - the posts 
    discussion_id 
    discussion_user 
    discussion_board 
    discussion_time 
    discussion_title 

users 
    id 
    username  

本来我有这样的:

SELECT 
    a.discussion_id, 
    a.discussion_time, 
    a.discussion_title, 
    a.discussion_type, 
    a.discussion_media, 
    b.username, 
    Count(c.comment_id) AS totalComments 
FROM 
    discussion a, 
    users b, 
    comments c 
WHERE 
    discussion_board='".$board['board_id']."' AND 
    b.id=a.discussion_user AND 
    c.comment_post=a.discussion_id 

但它只能说明后,如果能找到注释。

我该如何解决这个问题?我仍然在学习更多关于SQL和数据库的关系。左连接?

+1

http://stackoverflow.com/questions/419375/sql-join-differences – jball 2010-12-08 18:39:49

回答

0

使用SQL-92连接语法(您明确使用join)关键字进行连接时,会使查询更具可读性,尤其是在开始添加外连接之后。

是的,你想要一个left join到你的评论表。

1
SELECT a.discussion_id, a.discussion_time, a.discussion_title, a.discussion_type, a.discussion_media, b.username, Count(c.comment_id) AS totalComments FROM discussion a, 
left join users b on b.id=a.discussion_user 
left join comments c on c.comment_post=a.discussion_id WHERE discussion_board='".$board['board_id']."'" 
3

左连接是去了,因为他们会从拉的一切,不管是否有在B或C的相应条目的方式。有关连接(以及一般SQL)的更多信息,请参见here