如果有新回复

时间:2017-06-13 08:59:30

标签: codeigniter

我有一个我的主题列表,默认情况下会得到reply_id为0的主题然后按date_created排列。

如果对其中一个主题有回复,那么每个主题应该如何回到列表的顶部。

  

问题如何确定主题是否有新回复,然后该主题将转到列表。

目前我的var转储你可以看到有两个项目,第二个数组项应该在顶部,因为它有一个新的最后发布时间()

Array
(
    [0] => Array
        (
            [title] => How to
            [author] => demo
            [author_post_time] => Tue Jun 13 , 2017 19:43:01 pm
            [last_post_by] => demo
            [latest_post_time] => Tue Jun 13 , 2017 19:43:01 pm
        )

    [1] => Array
        (
            [title] => How to install codeigniter
            [author] => admin
            [author_post_time] => Sat Jun 10 , 2017 23:26:48 pm
            [last_post_by] => demo
            [latest_post_time] => Tue Jun 13 , 2017 20:48:00 pm
        )

)

数据库enter image description here

的图片

模型

<?php

class Topic_model extends CI_Model 
{
    public function get_active_topics($fid) 
    {
        $data = array();

        $this->db->select('t.*, u.username');
        $this->db->from('topics t');
        $this->db->join('user u', 'u.user_id = t.user_id');
        $this->db->where('t.reply_id', '0');
        $this->db->order_by('t.date_created', 'desc');
        $query = $this->db->get();

        foreach ($query->result_array() as $topic_result) 
        {
            $reply = $this->get_reply($topic_result['topic_id']);

            // This $date1 just for display only as shown on image
            $date1 = date('D M d', $topic_result['date_created']) . ' , ' . date('Y H:i:s a', $topic_result['date_created']);

            // This $date2 just for display only as shown on image
            $date2 = date('D M d', $reply['date_created']) . ' , ' . date('Y H:i:s a', $reply['date_created']);

            $data[] = array(
                'title' => $topic_result['title'],
                'author' => $topic_result['username'],
                'author_post_time' => $date1,
                'last_post_by' => isset($reply['username']) ? $reply['username'] :  $topic_result['username'],
                'latest_post_time' => ($reply['reply_id'] > 0) ? $date2 : $date1, 
            );

        }

        return $data;
    }

    public function get_reply($reply_id)
    {
        $this->db->select('t.*, u.username');
        $this->db->from('topics t');
        $this->db->join('user u', 'u.user_id = t.user_id');
        $this->db->where('t.reply_id', $reply_id);
        $this->db->limit(1);
        $query = $this->db->get();


        if ($query->num_rows() > 0) {
        return $query->row_array();
        }

        return false;
    }
}

enter image description here

2 个答案:

答案 0 :(得分:1)

请尝试使用下面提到的行,我希望这可以解决您的问题。

更改
$this->db->order_by('t.date_created', 'desc');

$this->db->order_by('t.reply_id DESC, t.date_created DESC');

答案 1 :(得分:0)

首先尝试按日期2排序您的表,如果不存在(没有回复),则按date1。您似乎已经实现了它,您只需按帖子上创建的日期进行排序。