PHP:关于mysql一个表里实现多级评论及评论的回复

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lixiaogang_theanswer/article/details/81024142

1.建表,思路关键
字段:comment_id自增id,comment_date评论时间,comment_content评论内容,t_user_id用户id,t_reply_id回复对象的用户id,t_post_id帖子id(也就是你要评价的这个信息的id,上一级主表的id),type(可能项目中有很多地方要用到,以作区分),task_id(回复的城主的id即comment_id)等自己所需要的字段自行定义。
2.怎么进行评价
首先评价,没有涉及到回复时只传评价内容与相应id,即可,task_id与t_reply_id不管,当涉及回复时,传相对应的comment_id给task_id与要回复的对方的用户id.
3.查询
把comment_task_id,t_post_id作为条件,查2次表即分别关连不同的用户id查,如下

$new['task_id']=array('eq',0);
$data=$Model->field(self::$Field)
            ->join('t_user on t_comment.t_user_user_id=t_user.user_id')
            ->where($new)
            ->select();

        $new['task_id']=array('neq',0);
        $rest=$Model->field(self::$Field)
            ->join('t_user a on t_comment.t_user_user_id=a.user_id ')
            ->join('t_user b on t_comment.t_reply_id=b.user_id')
            ->where($new)
            ->select();
        foreach($data as $k=>$v){
            foreach($rest as $k1=>$v1){
                if($data[$k]['comment_id']===$rest[$k1]['task_id']){
                    $data[$k]['reply']=$rest;
                }
            }
        }

如上比较2者的id,如果相同,说明comment_id是城主,然后把相关回复都放到城主的数据之下即可。
4.为了达到如A回复B:,B回复A,B回复C等,如上代码,可得到双方昵称,即

 ->join('t_user a on t_comment.t_user_user_id=a.user_id ')
 ->join('t_user b on t_comment.t_reply_id=b.user_id')

今天学到的新技能,但是字段里也要标明这个昵称是哪个表的,比如a.name,b.name,然后再取个别名就ok了。

猜你喜欢

转载自blog.csdn.net/lixiaogang_theanswer/article/details/81024142