Codeigniter 2活动记录 - 如何创建临时表以应用第二个排序顺序?

时间:2012-09-20 17:50:49

标签: php sql database codeigniter activerecord

我正在更新旧网站。我正在做的一件事就是重写数据库查询,因为我已经改变了数据库的结构,使其更加灵活,可以从管理员进行配置。

我以前使用过以下查询(以及许多其他类似的查询),它依赖于临时表:

$query = $this->db->query("SELECT * FROM (SELECT * FROM Links WHERE Cat LIKE ('$c') AND Type LIKE ('%$x%') LIMIT $s, $l) AS T ORDER BY $sort $o");

因为查询变得更复杂并且现在涉及大量连接,所以我决定使用活动记录语法来使它们更容易阅读。问题是我找不到任何关于如何使用活动记录将临时表应用于数据的信息;当然这有可能吗?

这是我的新查询:

    $this->db
        ->select('*')
        ->from('item_categories')
        ->where('item_categories.cat_id', $c)
        ->or_where('item_categories.parent_id', $c)
        ->or_where('item_categories.gparent_id', $c)
        ->join('item_categories_rel', 'item_categories_rel.cat_id = item_categories.cat_id', 'right')
        ->join('item_entries', 'item_entries.item_id = item_categories_rel.item_id','right')
        ->join('ratings_total', 'ratings_total.item_id = item_entries.item_id')
        ->order_by("item_name", "asc")
        ->limit($l, $s);
        // up to here I want to store as a temporary table then apply next order
        //->order_by($sort, $o); - ideally I want to apply a second order like this
    $result = $this->db->get();

我想两次申请'order by'但是这不起作用 - 活动记录不是那个切割器(或者更像是很模糊),我怎么能在活动记录中做到这一点?

非常感谢任何帮助。如果没有活动记录方法,任何人都可以建议我如何对结果对象应用排序吗?

1 个答案:

答案 0 :(得分:0)

尝试检查生成的SQL:print $this->db->_compile_select()。还有一个加号信息:CI不支持子查询。