2013-05-08 45 views
-2

我有两张桌子。同时获得新闻和评论

新闻

news_id | header | text

news_comments

comment_id | comment | date | fk_news_id

目前我只是拉出来的消息。不过,我也想提出意见,但是我不太确定我是否可以提出一个查询,或者我是否应该先收到新闻,然后再发表评论。

哪种方法(如果可能的话)会更好?

+0

为什么你不使用内部连接? – 2013-05-08 06:07:43

+0

这样做会为每条评论产生一条新闻条目。如果新闻条目有3条评论,那么该条目将从数据库中拉出3条,结果为 – 2013-05-08 06:11:58

+0

什么是您的RDBMS? – 2013-05-08 06:14:22

回答

2

我并不确切地知道,如果那是你心目中...

SELECT 'N' AS type, news_id, header, text, NULL AS date 
FROM news 
UNION 
SELECT 'C' AS type, fk_news_id AS news_id, NULL AS header, comment AS text, date 
FROM comments 
ORDER BY news_id, type desc 

这会为您提供一个单一的结果集,但你必须要考虑当不同的列名从结果中检索评论数据

+0

对于少数类似的列,这看起来相当实用。你可能会考虑'UNION ALL',因为你知道所有的列已经不同 – 2013-05-08 07:10:30

2

使用INNER JOIN

SELECT a.*, b.* 
FROM news a 
     INNER JOIN news_comments b 
      ON a.news_ID = b.fk_news_id 
ORDER BY a.news_ID, b.comment_ID 

为了进一步获得更多的知识有关加入,请访问以下链接:

上面的语句将只返回news有在至少有一条评论,如果你想返回所有的新闻,甚至没有评论,使用LEFT JOIN

SELECT a.*, b.* 
FROM news a 
     LEFT JOIN news_comments b 
      ON a.news_ID = b.fk_news_id 
ORDER BY a.news_ID, b.comment_ID 
+0

这样做会为每条评论产生一条新闻条目。如果新闻条目有3条评论,那么该条目将从数据库中提取3条结果 – 2013-05-08 06:10:56

+0

不幸的是,您希望如何显示您的评论?或者为什么不在应用程序级别进行格式化? – 2013-05-08 06:11:50

+0

我可以做到这一点,但是在消息被拉出之后,是否比单独提出评论更有效? – 2013-05-08 06:12:53