【问题标题】:SQL statement - how do I do this in active record?SQL 语句 - 我如何在活动记录中执行此操作?
【发布时间】:2012-09-29 13:19:30
【问题描述】:

我正在努力创建一个活动记录语句来做我想做的事,这是我目前的尝试:

$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,所以它可能有点错误,但希望你能得到我想要做的。

【问题讨论】:

  • 你会想看看this
  • 我猜这将是 b 计划,但在 AR 中肯定有办法做到这一点
  • 然后执行 B 计划。CodeIgniter Active Record 不适用于子查询。所以,不,没有办法在 AR 中做到这一点。至少不对核心文件进行一些修改。
  • 感谢您的帮助-您能否提交链接作为答案,因为它似乎是经过一些小修改的解决方案-stackoverflow.com/questions/10768582/…(尽管我的查询语法不正确,但它正在做什么我想要)

标签: sql database codeigniter activerecord


【解决方案1】:

CodeIgniter Active Record 无法做到这一点。这不是故意的。您可以改用this library 作为解决方法。

【讨论】:

    猜你喜欢
    • 2013-06-28
    • 2013-08-31
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多