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 回答