2017-06-13 7 views
0

私のトピックのリストは、デフォルトでreply_idが0のトピックを取得し、そこからdate_createdによって並べ替えます。新しい返信がある場合はリストの先頭にトピックを表示

トピックのいずれかへの返信がある場合、そのトピックはリストの先頭に移動する必要があります。

質問どのように私は、トピックへの新しい返信があれば、そのトピックがリストに行くことを確認することができます。

現在のところ、それは新しい最後のポストの時間()データベースの

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 
     ) 

) 

イメージを持っているので、あなたが第二配列の項目が一番上にあるべきか、これまで二つのアイテムを持って見ることができるように私のvarダンプ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

+0

TO

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

から

変更するには、トピックと返信のための1つまたは2つのテーブルを持っていますか? – Tpojka

+0

@Tpojkaちょうど1つ。 – user4419336

+0

これは2つのテーブルのジョブです。ブログ記事やコメントと同様に、1対多数の関係を持つ。 – Tpojka

答えて

1

下記の行を使用してください。これで問題が解決されることを願っています。

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

私から票を出してください。私はちょうど2つのテーブルの方法に戻ってみて、 '$ this-> db-> order_by( 'r.date_created DESC、t.date_created DESC');という方法で試してみました;この方法は今、チップのおかげでうまくいくようです – user4419336

+0

@ wolfgang1983 、あなたを助けてうれしい。 –

0

まず、あなたのテーブルをdate2で​​注文し、それがなければ(返信なし)、次にdate1。既に実装されているようですが、ポストに作成された日付で注文しているだけです。

+0

$ date1と$ date2は画像の下にある – user4419336

+0

で見ることができますdate1とdate2はこの行を '$ this-> db-> order_by(' t.date_created '、' desc ');に変更することを意味していました。 reply_idがトピックのいずれでも0でない場合、代わりに最新の返信で注文する –

関連する問題