PHP/MySql 选择与回复分组的评论
Posted
技术标签:
【中文标题】PHP/MySql 选择与回复分组的评论【英文标题】:PHP/MySql Select Comments Grouped with Replies 【发布时间】: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。
【问题讨论】:
【参考方案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”语句 @korneshHAVING
如果两个表中要匹配的列具有相同的名称,则有效。【参考方案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,您的查询会寻求帮助。以上是关于PHP/MySql 选择与回复分组的评论的主要内容,如果未能解决你的问题,请参考以下文章