我正在努力创建一个活动记录语句来做我想做的事,这是我目前的尝试:
$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,所以它可能有点错误,但希望你能得到我想要做的。