CodeIgniter Active Record选择2个或更多表

时间:2013-03-04 22:16:16

标签: codeigniter activerecord codeigniter-2

我在旧代码中设置了这个sql语句并希望将其移到活动记录中,我要分阶段解决的问题是如何进行

 SELECT news_items.id FROM 

 (SELECT news_items.* FROM news_items 
 JOIN feeds ON feeds.id=news_items.feed 
 LEFT JOIN news_item_country ON news_item_country.id=news_items.country 
 WHERE news_items.id=30758 
 ORDER BY date_item DESC ) 

 AS news_items

 GROUP BY news_items.id 
 ORDER BY date_item DESC

尝试使用Active Record执行此操作,首先我创建了select中的select,这至少是我认为需要完成的。

$news_items = $this->db->select('default_news_items.*')
              ->from('default_news_items ')
              ->join('default_feeds','default_feeds.id=default_news_items.feed')
->join('default_news_item_country','default_news_item_country.id=default_news_items.country','left')
->join('default_news_item_options','default_news_item_options.id=default_news_items.options','left')
              ->where($where)                        
              ->order_by('date_item DESC')
              ->limit($limit)
              ->get();               

接下来,我创建实际的选择并引用from

中的另一个选择
    if ($query = $this->db->select("
                            news_items.id,
                    ->from($news_items)
                    ->group_by('news_items.id')
                    ->get()) {

它不起作用,所以我问是否有人有这方面的经验以及如何做到这一点?

2 个答案:

答案 0 :(得分:0)

您无法直接在本机活动记录语法中执行子查询。查看此答案以获得解决方案:

subquery in codeigniter active record

(作者为活动记录子查询编写了一个库http://labs.nticompassinc.com/CodeIgniter-Subqueries/

如果没有这种或类似的技术,您需要至少为子查询($news_items)保留当前的选择代码。

答案 1 :(得分:0)

看看我的这个答案,这可能有助于你如何实现它。

Using Mysql WHERE IN clause in codeigniter