这样的sql怎么写?

加入 有如下 两张表
comment表记录评论和评论的回复

CREATE TABLE `comment` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `comment` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) 

reply_to表记录 回复和评论的关系

CREATE TABLE `reply_to` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `response_id` int(11) NOT NULL, //回复id对应comment表中的id
  `comment_id` int(11) NOT NULL, //评论id对应comment表中的id
  PRIMARY KEY (`id`)
) 

表comment数据 如下

clipboard.png
reply_to表数据如下

clipboard.png

请问,显示 评论(有无评论都显示)以及评论的回复的sql如何写?
此问题来自
https://stackoverflow.com/que...
评论采纳的 答案最后的sql是错误的吧?!!

clipboard.png
因为结果明显不对啊(但是不应该不对啊,不对肯定有人指出啊~):

clipboard.png

阅读 2.1k
2 个回答

去看了下, 答案中第一个sql是正确的, 但是没法显示无回复的评论. 因此使用outer join改写下就好了, 只是改的时候改错了, 也没人注意到. 然后这种我是比较支持放在一个表里的.
正确的改写sql是:

SELECT
    c. COMMENT ,
    r. COMMENT AS reply
FROM
    `comment` c
LEFT OUTER JOIN reply_to rt ON c.id = rt.comment_id
LEFT OUTER JOIN `comment` r ON rt.response_id = r.id

表的设计就有问题,评论和回复的关系是一对多,所以用不到关系表。

评论表 comment
comment_id,text

回复表 reply
reply_id,comment_id,reply_text

查询
SELECT * FROM comment LEFT JOIN reply ON comment.comment_id = reply.comment_id

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题