鍍金池/ 問(wèn)答/PHP  C  HTML/ 如何像簡(jiǎn)書(shū)一下實(shí)現(xiàn)二級(jí)評(píng)論

如何像簡(jiǎn)書(shū)一下實(shí)現(xiàn)二級(jí)評(píng)論

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

id 主鍵 pid 父id article_id 文章id

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

    /**
     * @param $data array  數(shù)據(jù)
     * @param $pid  string 父級(jí)元素的名稱(chēng) 如 parent_id
     * @param $id     string 子級(jí)元素的名稱(chēng) 如 comm_id
     * @param $p_id     int    父級(jí)元素的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;
    }

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

clipboard.png

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

clipboard.png

回答
編輯回答
她愚我

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

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

我之前入職的一家公司做過(guò)一個(gè)APP。也是有你說(shuō)的這種二級(jí)評(píng)論的情況。針對(duì)這種情況,解決的辦法是分成兩張表。
一張表存儲(chǔ)一級(jí)評(píng)論。另外一張表存儲(chǔ)二級(jí)評(píng)論。
然后每次獲取的時(shí)候先去查詢(xún)一級(jí)評(píng)論表,然后再次查詢(xún)二級(jí)評(píng)論的表。

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

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

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

clipboard.png

2017年8月24日 20:39