0

たとえば、メインのコメントとそのコメントへの返信がありますが、それ以上は進みません。

main comment 1
  (sub_comment1)
  (sub_comment2)

main comment 2
  (sub_comment1)
  (sub_comment2)
  (sub_comment2)

等...

わかる?

私は codeigniter でサイトを作成していますが、基本的な php ソリューションで十分だと思います。

私のデータベーステーブルの各行にはidとparent_idがあり、親idが0の場合はメインコメントであり、サブコメントの場合はparent_idに親コメントのidがあります。

親と子のコメントを正しい順序で 2 次元配列にフィードする方法。

私の現在のコードは次のようなものです: コントローラ:

 function status_comments($id){

    $this->load->model('status_model');//load the status model
    $this->load->model('comment_model');//load the comment model

    $status = $this->status_model->get_entry_and_category($id); 
    $comments = $this->comment_model->get_comments($id);   

    if($status !== false) {

        if($comments !== false) {

            foreach($comments as $comment){

                  if($comment->reply_id == 0){

                    $comment =   

                  }
            }


            $content_data['comments'] = $comments; 

        }        

        $content_data['status'] = $status; 
        $data['content'] = $this->load->view('status_view', $content_data, TRUE);
        $data['title'] = $status->title.' - High Value Status'; 
        $data['page_title'] = $status->title;//The page H1 tag
        $this->load->view('home', $data);   

    }
    else 
    { 
        $this->session->set_flashdata('invalid', '<p class="rejectionalert"><span>The status you tried to view does not exist.</span></p>');
        redirect('home'); 
    }

}

モデル関数:

//Gets comments associated with an individual status   
function get_comments($status_id, $offset=null, $limit=null)
{
    $this->db->select('id, comment, nickname, created, reply_id');
    $this->db->from('comments');
    $this->db->where('active', 1);
    $this->db->where('status_id', $status_id);

    $query = $this->db->get(); 

    if ($query->num_rows() > 0) {

        return $query->result();      
    }

    return false;   
}
4

1 に答える 1

0

これは機能しますが、複数のクエリ、モデルを使用しています:

 function get_comments($status_id, $limit=NULL, $offset=NULL)
 {
    $this->db->where(array('status_id' => $status_id, 'reply_id' => 0));
    $query = $this->db->get('comments', $limit, $offset);

    $parents = $query->result_array();
    $comments = array(); 

    foreach($parents as $key => $comment)
    {
        array_push($comments, $comment);

        $this->db->order_by('created', 'ASC');
        $this->db->where(array('status_id' => $status_id, 'reply_id' => $comment['id']));

        $comments = array_merge($comments, $this->db->get('comments')->result_array());
    }

    return $comments;   

}

私は、すべてのコメントに対して 1 つのクエリを作成し、それらを ID で配列にインデックス付けし、それらを繰り返し処理して子を見つける方が効率的だと考えました。私はまだそれを実装する方法を知りませんか?

于 2013-02-05T00:22:54.557 に答える