게시판 구조



grp, depth, level 을 이용한 계층형 게시판 소스입니다.



방식 1 : 최근 답변을 위로


    public function follow($data)

    {

        $no = $data['no'];

        $grp = $data['grp'];

        $depth = $data['depth'];

        $level = $data['level'];


        $follow = $data['follow'];


        $result = $this->select("select grp, depth, level from board where no={$no}");

        foreach ($result as $row) {

            $grp = $row[0];

            $depth = $row[1];


            $this->query("update board set depth = depth + 1 where grp={$grp} and depth > {$depth}");


            $depth = $row[1] + 1;

            $level = $row[2] + 1;

        }


        $result = $this->query("insert into board (uid, name, title, content, ctim, follow, grp, depth, level)"

            . "values('{$data['uid']}', '{$data['name']}', '{$data['title']}', '{$data['content']}', '{$data['ctim']}', {$no}, {$grp}, {$depth}, {$level})");


        return $result;


    }


참고 : 구글링 링크 중 가장 흔한 방식




방식 2 : 최근 답변을 밑으로



public function follow($data)

{

    $no = $data['no'];

    $grp = $data['grp'];

    $depth = $data['depth'];

    $level = $data['level'];


    $follow = $data['follow'];


    $result = $this->select("select grp, depth, level from board where no={$no}");

    foreach ($result as $row) {

        $grp = $row[0];

        $depth = $row[1];

        $level = $row[2];

    }


    $result = $this->select("select min(depth) from board where grp = {$grp} and depth > {$depth} and level <= {$level}");

    foreach ($result as $row) {

        $depth = $row[0];

    }


    if ($depth == null) {

        $result = $this->select("select max(depth) + 1   from board  where grp = {$grp}");

        foreach($result as $row) {

            $depth = $row[0];

        }

    } else {

        $this->query("update board set depth = depth + 1 where grp = {$grp} and depth >= {$depth}");

    }


    $level = $level + 1;


    $result = $this->query("insert into board (uid, name, title, content, ctim, follow, grp, depth, level)"

        . "values('{$data['uid']}', '{$data['name']}', '{$data['title']}', '{$data['content']}', '{$data['ctim']}', {$no}, {$grp}, {$depth}, {$level})");


    return $result;


}




참고 : https://okky.kr/article/98829 의 내용을 참고하여 재구성



$data로 받는 것은 전부 부모 글의 정보들 입니다.



옛날에나 개인 홈페이지 만들고 그랬는데 요즘은 뭐.. XE엔진, 워드프레스, 블로그 등 다양한 방법으로 자신만의 웹사이트를 만들 수 있기때문에 장인 정신으로 직접 만드는 사람은 거의 없지 않나 싶다.


하지만 웹 사이트의 알고리즘을 익히고 구조를 계획하며 다룰 땐 이런 고전적인 것이 제일 좋은 방법인 듯 하다.