我有两张桌子。同时获得新闻和评论
新闻
news_id | header | text
news_comments
comment_id | comment | date | fk_news_id
目前我只是拉出来的消息。不过,我也想提出意见,但是我不太确定我是否可以提出一个查询,或者我是否应该先收到新闻,然后再发表评论。
哪种方法(如果可能的话)会更好?
我有两张桌子。同时获得新闻和评论
新闻
news_id | header | text
news_comments
comment_id | comment | date | fk_news_id
目前我只是拉出来的消息。不过,我也想提出意见,但是我不太确定我是否可以提出一个查询,或者我是否应该先收到新闻,然后再发表评论。
哪种方法(如果可能的话)会更好?
我并不确切地知道,如果那是你心目中...
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
这会为您提供一个单一的结果集,但你必须要考虑当不同的列名从结果中检索评论数据
对于少数类似的列,这看起来相当实用。你可能会考虑'UNION ALL',因为你知道所有的列已经不同 – 2013-05-08 07:10:30
使用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
这样做会为每条评论产生一条新闻条目。如果新闻条目有3条评论,那么该条目将从数据库中提取3条结果 – 2013-05-08 06:10:56
不幸的是,您希望如何显示您的评论?或者为什么不在应用程序级别进行格式化? – 2013-05-08 06:11:50
我可以做到这一点,但是在消息被拉出之后,是否比单独提出评论更有效? – 2013-05-08 06:12:53
为什么你不使用内部连接? – 2013-05-08 06:07:43
这样做会为每条评论产生一条新闻条目。如果新闻条目有3条评论,那么该条目将从数据库中拉出3条,结果为 – 2013-05-08 06:11:58
什么是您的RDBMS? – 2013-05-08 06:14:22