鍍金池/ 問答/PHP  C  HTML/ 如何像簡書一下實(shí)現(xiàn)二級評論

如何像簡書一下實(shí)現(xiàn)二級評論

如何像簡書一樣實(shí)現(xiàn)二級評論呢?
我現(xiàn)有字段部分如下:

id 主鍵 pid 父id article_id 文章id

我原本的實(shí)現(xiàn)如下

    /**
     * @param $data array  數(shù)據(jù)
     * @param $pid  string 父級元素的名稱 如 parent_id
     * @param $id     string 子級元素的名稱 如 comm_id
     * @param $p_id     int    父級元素的id 實(shí)際上傳遞元素的主鍵
     * @return array
     */
    public function getSubTree($data , $pid , $id , $p_id = 0) {
        $tmp = array();
        foreach ($data as $key => $value) {
            $value['avatar'] = getAvatar($value['from_user_id']);
            if($value[$pid] == $p_id) {
                $value['child'] =  $this->getSubTree($data , $pid , $id , $value[$id]);
                $tmp[] = $value;
            }
        }
        return $tmp;
    }

獲取到的評論結(jié)構(gòu)如下

clipboard.png

那么我如何能夠把第三級評論拿出來放到二級評論實(shí)現(xiàn)簡書的那種評論結(jié)構(gòu)呢?

clipboard.png

回答
編輯回答
她愚我

增加一個頂級父節(jié)點(diǎn)字段

2017年4月16日 13:07
編輯回答
痞性

我之前入職的一家公司做過一個APP。也是有你說的這種二級評論的情況。針對這種情況,解決的辦法是分成兩張表。
一張表存儲一級評論。另外一張表存儲二級評論。
然后每次獲取的時(shí)候先去查詢一級評論表,然后再次查詢二級評論的表。

2017年4月11日 16:55
編輯回答
入她眼

最好不要foreach里面跟sql,數(shù)據(jù)量大就會阻塞
把a(bǔ)rticle查出來 ,再把comment查出來,拼在一起就行

2018年3月11日 11:28
編輯回答
假灑脫
$comments = Db::name('comment')->where($map)->limit($offset, $per_page)->select();
foreach ($comments as $k => $v){
    $comments[$k]['avatar'] = getAvatar($v['from_user_id']);
    $map['pid'] = $v['id'];
    $comments[$k]['child'] = Db::name('comment')->where($map)->select();
}

實(shí)際上我可以通過這種方式來實(shí)現(xiàn),但是我擔(dān)心的是當(dāng)數(shù)據(jù)量大的時(shí)候,會不會出現(xiàn)性能問題,希望有經(jīng)驗(yàn)的大佬指教。
以下是我通過這種方式得到的評論數(shù)據(jù)結(jié)構(gòu)

clipboard.png

2017年8月24日 20:39