我有这样的表/记录:
Table: COMMENTS
---------------------------------------------
COMMENT_ID | CONTENT | CREATE_DATE
---------------------------------------------
1 | Content 1 | 2016-09-01
2 | Content 2 | 2016-09-02
3 | Content 3 | 2016-09-03
4 | Reply 2-1 | 2016-09-04
5 | Reply 1-1 | 2016-09-05
6 | Reply 1-1-1 | 2016-09-06
Table: REPLY_COMMENTS
---------------------------------
COMMENT_ID | REPLY_TO_COMMENT_ID
---------------------------------
4 | 2
5 | 1
6 | 5
我想显示这个顺序的记录:
---------------------------------------------
COMMENT_ID | CONTENT | CREATE_DATE
---------------------------------------------
1 | Content 1 | 2016-09-01
5 | Reply 1-1 | 2016-09-05
6 | Reply 1-1-1 | 2016-09-06
2 | Content 2 | 2016-09-02
4 | Reply 2-1 | 2016-09-04
3 | Content 3 | 2016-09-03
所以'回复'内容应该在父母的内容之下 - 但回复内容也应该在CREATE_DATE之前订购。
基本上,我想整理:内容并以CREATE_DATE的顺序回复。
我写了这样的查询:
SELECT comment.*
FROM COMMENTS comment
LEFT JOIN REPLY_COMMENTS reply_comment ON reply_comment.COMMENT_ID = comment.COMMENT_ID
ORDER BY (SOMETHING SHOULD BE HERE), comment.CREATE_DATE ASC
我不能用我目前的知识编写order by子句 - 请帮帮我(我正在使用MySQL)。
答案 0 :(得分:1)
如果char和numeric值之间总是有空格,那么它可以正常工作(对于当前数据),否则你可以尝试以棘手的方式使用字符串函数:
COMMENT_ID CONTENT CREATE_DATE
---------- ------------- -----------
1 Content 1 2016-09-01
2 Content 2 2016-09-02
3 Content 3 2016-09-03
4 Reply 2-1 2016-09-04
5 Reply 1-1 2016-09-05
6 Reply 1-1-1 2016-09-06
7 Reply 1-10-12 2016-09-06
SELECT comment.*
FROM COMMENTS COMMENT
LEFT JOIN REPLY_COMMENTS reply_comment ON reply_comment.COMMENT_ID = comment.COMMENT_ID
ORDER BY REPLACE(content, LEFT(content, LOCATE(' ', content) - 1), '')
--OUTPUT--
COMMENT_ID CONTENT CREATE_DATE
---------- ------------- -----------
1 Content 1 2016-09-01
5 Reply 1-1 2016-09-05
6 Reply 1-1-1 2016-09-06
7 Reply 1-10-12 2016-09-06
2 Content 2 2016-09-02
4 Reply 2-1 2016-09-04
3 Content 3 2016-09-03
答案 1 :(得分:0)
我认为这是不可能的 - 所以我最终在SEQNO
表中添加了新列:COMMENTS
。插入新评论时,该列将会更新。