2012-12-13 57 views
1

現在我加入了返回表中最初的帖子行,我希望它有最後一行每個主題codeigniter:不想要第一行但是連接的表的最後一行?

這是我的代碼現在

$this->db->select('*'); 
     ->where('disccategory_id', $cat); 
     ->from('discussiontopics as topics'); 
     ->join('discussionposts as posts', 'posts.topic_id = topics.id', 'left'); 
     ->order_by('posts.id', 'desc'); 
     ->group_by('topics.id'); 

也許我只能用裏面的一個選擇做加入?但不知道怎麼做,用笨的活動記錄

+0

你不能以相反的方式訂購它,並選擇頂部?或者去底部? –

+0

$ this-> db-> order_by('posts.id','asc');不會改變結果。我只收到一行 –

回答

2
$this->db->query(" 
SELECT * 
FROM ( SELECT *, 
      topics.id AS topic_id 
     FROM discussiontopics as topics 
     LEFT JOIN discussionposts as posts 
     ON posts.topic_id = topics.id 
     ORDER BY posts.id DESC) AS h 
GROUP BY topic_id 
"); 

如果你想知道爲什麼你不工作,拼命地跑查詢後運行一個echo $this->db->last_query();,你會看到,如果行爲方式。

+0

這是我如何解決它'$ query = $ this-> db-> query(「 SELECT * FROM discussiontopics as topics LEFT JOIN SELECT * FROM discussionposts ORDER BY ID DESC)AS selectedposts ON(selectedposts.topic_id = topics.id) WHERE topics.disccategory_id = $貓 GROUP BY topics.id; 「);' –

+0

解析時值' query()',通過第二個參數作爲數組發送它們。 'query(「.. topics.disccategory_id =?..」,array($ cat))'這樣可以節省你的一天對SQL注入。 –

+0

啊,很高興知道 –

0

其實這不應該工作,之所以是ORDER BY之後分組執行,如果你寫

->order_by(...) 
->group_by(...) 

->group_by(...) 
->order_by(...) 

這沒關係,查詢將始終有GROUP BY之前ORDER BY

什麼用這裏討論你最有可能有問題:

MySQL Order before Group by

所以我寧願寫使用

$this->db->query(' 
    SELECT ... 
'); 

甚至手動得到行的列表的查詢(您沒有分組的查詢)並且只取第一個。

希望它有幫助!

+0

非常感謝,可以通過手動查詢解決它 –

相關問題