2012-09-29 153 views
1

我奮力創建活動記錄語句來完成我想要的東西,這是我當前的嘗試:SQL語句 - 如何在活動記錄中執行此操作?

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

+0

你會想看看[this](https://github.com/NTICompass/CodeIgniter-Subqueries)。 –

+0

我想這將是計劃B,但肯定有一種方法可以在AR – WebweaverD

+0

中執行此操作,然後按計劃B進行。CodeIgniter Active Record不適用於子查詢。所以,不,在AR中沒有辦法做到這一點。至少不是沒有對核心文件進行一些修改。 –

回答

1

你不能用CodeIgniter Active Record來做到這一點。這並不意味着這樣做。您可以使用this library作爲解決方法。