PHP/MySql选择与回复分组的注释

pws*_*068 1 php mysql sql

我正在写一个脚本来处理类似facebook的状态/回复的评论.基本上,项目可以有注释,用户可以回复该注释(最高一级).

我的表格设置如下:

Comments: [ Comment_ID | User_ID | Content | etc...]
Comments_Reply: [ Comment_ID | Is_Reply_To ] 
Run Code Online (Sandbox Code Playgroud)

因此,如果用户回复评论#555,它会像评论一样出现在评论表中,那么在[555 |]中也会在Comments_Reply中获取一行.新评论ID ]

如何选择注释,使其按以下顺序排列:

[ 555 | ....
[ New Comment that replies to 555
[556 | ....
[557 | ....
Run Code Online (Sandbox Code Playgroud)

等等......回复后的回复显示回复.我正在使用PHP和MySql.

Kev*_*eno 7

好吧,我想我现在得到了你想要的东西.我没有办法快速测试这个函数的MYSQL版本,但SQLite版本工作得很好,根据文档,MySQL应该工作得很好.可能是在MySQL上做更好的方法.

SQLite的:

SELECT a.*, IFNULL( b.Is_Reply_To, a.Comment_ID ) as Is_Reply_To FROM Comments a LEFT JOIN Comments_Reply b HAVING(Comment_ID) ORDER BY Is_Reply_To ASC, a.Comment_ID ASC

MySQL的

SELECT a.*, IF( IS NULL(b.Is_Reply_To), a.Comment_ID, b.Is_Reply_To ) as Is_Reply_To FROM Comments a LEFT JOIN Comments_Reply b HAVING(Comment_ID) ORDER BY Is_Reply_To ASC, a.Comment_ID ASC

这为我的SQLite产生了这些结果.

Comment_ID Is_Reply_to
1          1
10         1
11         1
2          2
12         2
3          3
13         3
14         3
4          4
5          5
6          6
7          7
8          8
9          9
15         15
Run Code Online (Sandbox Code Playgroud)

  • 这是如何工作的,因为LEFT JOIN没有"ON"语句 (2认同)
  • 如果两个表中匹配的列具有相同的名称,则@kornesh`HAVING`有效. (2认同)