我在旧代码中设置了这个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()) {
它不起作用,所以我问是否有人有这方面的经验以及如何做到这一点?
答案 0 :(得分:0)
您无法直接在本机活动记录语法中执行子查询。查看此答案以获得解决方案:
subquery in codeigniter active record
(作者为活动记录子查询编写了一个库http://labs.nticompassinc.com/CodeIgniter-Subqueries/)
如果没有这种或类似的技术,您需要至少为子查询($news_items
)保留当前的选择代码。
答案 1 :(得分:0)
看看我的这个答案,这可能有助于你如何实现它。