我有一个我的主题列表,默认情况下会得到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
)
)
的图片
模型
<?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;
}
}
答案 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。您似乎已经实现了它,您只需按帖子上创建的日期进行排序。