单个查询嵌套注释

时间:2017-05-04 03:13:58

标签: mysql

为了创建一种显示嵌套注释的有效方法,我希望可以使用一个查询。

简化评论表

CREATE TABLE comment (
comment_id int unsigned primary key auto_increment,
date int unsigned,
parent_id int unsigned,
comment text);

澄清一下,评论由date ASC订购。如果注释的parent_id不为null,则表示它是嵌套注释。这个parent_id是指所述评论'父comment_id

后一部分是我遇到困难的地方。任何人都可以帮我提出一个单独的mysql查询吗?

谢谢

1 个答案:

答案 0 :(得分:1)

以下代码应以有效的方式满足您的第二需求:

CREATE TABLE comment(
comment_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
date INT UNSIGNED,
parent_id INT UNSIGNED DEFAULT NULL,
commend TEXT,
FOREIGN KEY fk_parent(parent_id)
REFERENCES comment(comment_id)
ON UPDATE CASCADE
ON DELETE RESTRICT)

您只是想确保由于外键引用而未在父注释之前插入子注释。

但是,在按日期排序表时,MySQL CREATE TABLE语法不包含此类功能,我认为有效的实现方法是在查询时简单地使用ORDER BY。但请记住,如果您选择在稍后阶段更改表格并按日期订购,则此更改后的任何操作都不会遵守此订单。具体做法是:

ALTER TABLE comment ORDER BY date ASC

只会在您的表格中订购当前数据,而不会输入任何后续数据。

另外,请考虑使用DATE数据类型而不是int,具体取决于您的要求。