1

これで、結合されたテーブルが最初の投稿行を返します。各トピックの最後の行が必要です。

これが私のコードです

$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');

多分私は結合内の選択でのみそれを行うことができますか?しかし、Codeigniterのアクティブレコードでそれを行う方法がわかりません

4

2 に答える 2

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();後にクエリを実行すると、動作するかどうかがわかります。

于 2012-12-13T15:38:57.413 に答える
0

実際には動作しないはずですが、その理由は、グループ化後にORDER BY実行されるためです。

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

また

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

それは問題ではありません、クエリは常にGROUP BY前にありORDER BYます。

ここでは、問題が発生している可能性が最も高いものについて説明します。

グループ化前のMySQLの注文

だから私はむしろ手動でクエリを書きたい

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

または、行のリスト(グループ化せずにクエリ)を取得して、最初の行のみを取得することもできます。

それが役に立てば幸い!

于 2012-12-13T13:25:36.830 に答える