【问题标题】:PHP/MySql Select Comments Grouped with RepliesPHP/MySql 选择与回复分组的评论
【发布时间】:2011-03-07 17:12:58
【问题描述】:

我正在编写一个脚本来处理类似于 facebook 的状态/回复的 cmets。基本上,一个项目可以有 cmets 并且用户可以回复该评论(最多一级深度)。

我的表设置如下:

Comments: [ Comment_ID | User_ID | Content | etc...]
Comments_Reply: [ Comment_ID | Is_Reply_To ] 

因此,如果用户回复评论 #555,它会像常规评论一样出现在 cmets 表中,然后还会在 Comments_Reply 中获得一行 [ 555 | 新评论 ID ]

如何选择 cmets 以使其按以下顺序排列:

[ 555 | ....
[ New Comment that replies to 555
[556 | ....
[557 | ....

等等...在回复的评论之后按顺序显示回复。我正在使用 PHP 和 MySql。

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    好的,我想我现在得到了你想要的。我没有办法快速测试这个函数的 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
    

    【讨论】:

    • 这是如何工作的,因为 LEFT JOIN 没有“ON”语句
    • @kornesh HAVING 如果两个表中要匹配的列具有相同的名称,则有效。
    【解决方案2】:

    您好,您可以使用以下查询

    $q="从 cmets 中选择 *"; $rs=mysql_query($q); if($rs && mysql_num_rows($rs)) { 而($rd=mysql_fetch_object($rs)) { 回声($rd->comment_id); $q1="select * from cmets_reply where comment_id=".$rd->comment_id; $rs1=mysql_query($q1); if($rs1 && mysql_num_rows($rs1)) { 而($rd1=mysql_fetch_object($rs1)) { 回声($rd1->cmets_id); } } } }

    【讨论】:

    • 拥有 10,000 个 cmets,您的查询会寻求帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多