2012-10-05 26 views
1

我試圖編寫CodeIgniter上編寫的網站的搜索功能,但在模型中的連接語句有問題。codeigniter加入多行,其中

控制器將一系列搜索條件傳遞給模型函數:get_sales($ search_criteria);

function get_sales($search_criterie){ 

    $this->db->join('sales_prices', 'sales_prices.sale_id = sales.sale_id', 'left'); 
    $this->db->join('sales_sizes', 'sales_sizes.sale_id = sales.sale_id', 'left'); 
    $query = $this->db->get_where('sales', $search_criterie); 
    $sale_data = $query->result_array(); 

} 

我遇到兩個問題:

1)我需要一個WHERE子句中的sales_sizes加入。現在,它加入sales_sizes.sale_id ON sales.sale_id,但我希望能夠通過$ search_criteria數組進行大小過濾。我怎樣才能做到這一點?

2)每銷售通常有多種尺寸,我想查詢的輸出格式,如:

Array 
(
    [sale_id] => 1 
    [sale_category] => shoes 
    [sale_price] => 29.99 
    [sale_sizes] => Array 
     (
      [0] => 10 
      [1] => 10.5 
      [2] => 11 

     ) 

) 

我已經嘗試了一些foreach循環來格式化輸出,但不能讓它開始工作。希望有人能幫助。

更新:

我如何處理下面的查詢結果爲類似上面的格式?

Array 
(
    [0] => Array 
     (
      [sale_id] => 1 
      [sale_category] => shoes 
      [sale_price] => 29.99 
      [sale_size] => 10 
     ) 

    [1] => Array 
     (
      [sale_id] => 1 
      [sale_category] => shoes 
      [sale_price] => 29.99 
      [sale_size] => 10.5 
     ) 

    [2] => Array 
     (
      [sale_id] => 1 
      [sale_category] => shoes 
      [sale_price] => 29.99 
      [sale_size] => 11  
     ) 

) 
+0

您是否嘗試過使用sales_sizes進行分組? –

+0

是的,沒有工作... – 2083

+0

我認爲,爲了每次銷售返回一定數量的尺寸,您實際上必須通過sale_id,sale_category和sale_price進行分組。然而,這隻會返回大小不同但大小不一但其他列相同的記錄。爲了獲得你想要的數組格式,你必須做一些後處理,並根據返回的結果將它們放入數組中。 –

回答

0

嘗試這種類型的查詢

$this->db->select('places.*, category.*') 
      ->from('places') 
      ->join('category', 'places.category_id = category.category_id', 'left') 
      ->join('places_reviews', 'places_reviews.place_id = places.id', 'left') 
      ->where('places.category_id', $category_id) 
      ->limit($limit, $offset) 
      ->order_by($sort_by, $sort_order); 
+0

關於我的第二個問題,輸出仍然沒有正確的格式 如果銷售有多個尺寸,具有相同sale_id重複內容的新陣列返回每大小... 陣列 ( [0] =>數組 ( [sale_id] => 1 [sale_category的] =>鞋 [SALE_PRICE] => 29.99 [sale_size] => 10 ) [1] =>陣列 ( [sale_id] => 1 [sale_category] ​​=>鞋子 [sale_price] => 29。99 [sale_size] => 11 ) ) – 2083

1

的,我個人不使用活動記錄給出的忠實粉絲。我發現它經常限制程序員寫更復雜的查詢。如果你發現這是真實的,以及你可以重寫查詢如下:

$this->db->query('SELECT * FROM `sales_prices`, `sales_sizes` WHERE `sales_prices`.`sale_id` = `sales`.`sale_id` AND `sales_sizes`.`sale_id` = `sales`.`sale_id` AND `sales` = ?', array($search_criterie)); 
$sale_data = $query->results(); 

,這將產生相同的結果,也將參數查詢。請注意,問號對應於您的數組中的值,它將組成您的第二個參數$this->db->query()函數。