1

私は自分がやりたいことをするためにアクティブなレコードステートメントを作成するのに苦労しています.これが私の現在の試みです:

$this->db
            ->select('*')
            ->from('item_entries')
            ->where('is_pick', 'y')
            ->join('item_categories_rel', 'item_categories_rel.item_id = item_entries.item_id')
            ->join('item_categories', 'item_categories.cat_id = item_categories_rel.cat_id')
            ->join('ratings_total', 'ratings_total.item_id = item_entries.item_id')
            ->where('item_categories.cat_id', $cat_id)
            ->or_where('parent_id', $cat_id)
            ->or_where('gparent_id', $cat_id)
            ->order_by("item_name", "desc");  
        $query2 = $this->db->get();
        if(is_object($query)){return $query2->result_array();}else{return $query2;}

これは、次の sql に変換されます。

SELECT *
FROM (`item_entries`)
JOIN `item_categories_rel` ON `item_categories_rel`.`item_id` = `item_entries`.`item_id`
JOIN `item_categories` ON `item_categories`.`cat_id` = `item_categories_rel`.`cat_id`
JOIN `ratings_total` ON `ratings_total`.`item_id` = `item_entries`.`item_id`
WHERE `is_pick` =  'y'
AND `item_categories`.`cat_id` =  '3'
OR `parent_id` =  '3'
OR `gparent_id` =  '3'

今、私が欲しいのは(アクティブなレコードで一時テーブルを実行できないことはわかっていますが)これと同等です:

SELECT *
FROM (
    SELECT *
    FROM (`item_entries`)
    JOIN `item_categories_rel` ON `item_categories_rel`.`item_id` = `item_entries`.`item_id`
    JOIN `item_categories` ON `item_categories`.`cat_id` = `item_categories_rel`.`cat_id`
    JOIN `ratings_total` ON `ratings_total`.`item_id` = `item_entries`.`item_id`
    WHERE `is_pick` =  'y'
    AS T
)
WHERE `item_categories`.`cat_id` =  '3'
OR `parent_id` =  '3'
OR `gparent_id` =  '3'

アクティブなレコードでこの結果を取得するにはどうすればよいですか?

注意してください - 私は上記の SQL をチェックしていないので、少し間違っているかもしれませんが、私がやろうとしていることを理解していただければ幸いです。

4

1 に答える 1

1

CodeIgniter Active Record ではそれができません。そうするのは意味がありません。代わりに、このライブラリを回避策として使用できます。

于 2012-09-29T16:30:52.697 に答える