簡體   English   中英

Codeigniter在其中加入多行

[英]codeigniter join multiple rows where

我正在嘗試為在CodeIgniter上編寫的站點編寫搜索功能,但是模型中的join語句遇到了麻煩。

控制器將搜索條件數組傳遞給模型函數: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)我需要在sales_sizes連接中使用WHERE子句。 現在,它在sales.sale_id上​​加入了sales_sizes.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    
        )

) 

我個人不喜歡使用給定的活動記錄。 我發現它通常會限制程序員編寫更復雜的查詢。 如果您發現這也是對的,則可以按照以下方式重寫查詢:

$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()函數的第二個參數。

試試這種類型的查詢

$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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM