1

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

}

私は2つの問題に直面しています:

1)sales_sizes結合にWHERE句が必要です。現在、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    
        )

) 
4

3 に答える 3

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

これにより、同じ結果が生成され、クエリもパラメーター化されます。疑問符は、関数の 2 番目のパラメーターを構成する配列内の値に対応していることに注意してください$this->db->query()

于 2012-10-05T19:45:06.523 に答える
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);
于 2012-10-05T19:10:19.083 に答える