在许多2

时间:2016-09-04 04:36:25

标签: mysql sql recursion sql-order-by

我有这样的表/记录:

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)。

2 个答案:

答案 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。插入新评论时,该列将会更新。