mysql structure for comments and comment replies

前端 未结 7 833
耶瑟儿~
耶瑟儿~ 2020-12-04 20:16

I\'ve been thinking about this one for quite some time now, I need a way to add replies to comments in the database but I\'m not sure how to proceed.

This is my curr

7条回答
  •  余生分开走
    2020-12-04 21:17

    Looks like you are working with WordPress, adding a parent_comment_id would have been an ideal solution, but not in this case.

    Firstly, I don't think modifying the WordPress basic tables is a good idea. Secondly, you'll end-up with a complex code that will break with wordpress updates.

    Best is use a plugin like Intense Comments

    Still if you want to create your own solution, I would say create another table for comment replies. a) Your new table would look like this

    `CREATE TABLE IF NOT EXISTS `comment_replies` (
      `id` int(12) NOT NULL AUTO_INCREMENT,
      `parent_comment_id` int(12) NULL,
      `comment` text,
      `user_id` int(12) DEFAULT NULL,
      `topic_id` int(12) NOT NULL,
      `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`),
      KEY `user_id` (`user_id`),
      KEY `topic_id` (`topic_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8
    

    b) You'd fetch them this way

    $comment_ids = array_map( 'intval', array_keys( $comments ) );
    sort( $comment_ids );
    $comments_id_list = join( ',', $comment_ids );
    
    $query = "SELECT c.id, c.comment, c.user_id, u.username, u.photo
    FROM (comment_replies c)
    JOIN users u ON c.user_id = u.id
    WHERE c.parent_comment_id IN ( $comments_id_list )"
    
    $replies = $wpdb->get_results($query);
    $replies_by_parent = array();
    
    foreach ( array_keys( $replies ) as $i ) {          
        $replies_by_parent [$replies[$i]->id] = array();
    }
    foreach ( array_keys( $replies ) as $i ) {          
        $replies_by_parent [$replies[$i]->id][] =& $replies[$i];
    }
    

    c) Now within your comments loop you can get the replies like this

    foreach (  $replies_by_parent [$parent_id] as $reply ) {            
            echo $reply->comment;
        }
    

提交回复
热议问题