4

2つの別々のクエリからの2つの配列を結合したいと思います。製品を2つの別々のテーブルに保存しました。1つは名前、説明、価格などの一般的な情報用です。もう1つは、さまざまなディテール、つまり衣料品のサイズと色です。

したがって、私のデータベースは、製品に対して次のように構成されています。

products table:
p_id | title | descr | etc

product_attrs table:
attr_id | products.p_id | name | value

ここで、名前と値はname = Size value=Largeになります。

次のように、製品のすべての詳細を1つのクエリで取得しようとすると、次のようになります。

this->db->select('products.title,
                           p.description,
                           p.price,
                           p.stock,
                           p.name,
                           p.value');
        $this->db->from('p');
        $this->db->where('p.p_id', $id);
        $this->db->join('product_attrs', 'product_attrs.product_id = p.p_id', 'inner');
        $result = $this->db->get();

        return $result->result_array();

その製品のproduct_attributesテーブルにある名前/値のペアの数が入力された配列を取得します。したがって、製品に5つの属性がある場合、次のようにすべてを5回戻します。

Array ( [0] => Array ( [title] => Modest Swimsuit - Full body [description] => UV +50 Protection - Chlorine Resistant - Water Resistant - Quick Drying - Maximum Breathe Ability- Sea Water Resistant [price] => 59.95 [stock] => 20 [name] => Brand [value] => Modestly Active Swimwear ) [1] => Array ( [title] => Modest Swimsuit - Full body [description] => UV +50 Protection - Chlorine Resistant - Water Resistant - Quick Drying - Maximum Breathe Ability- Sea Water Resistant [price] => 59.95 [stock] => 20 [name] => Colour [value] => Black and Light Blue ) [2] => Array ( [title] => Modest Swimsuit - Full body [description] => UV +50 Protection - Chlorine Resistant - Water Resistant - Quick Drying - Maximum Breathe Ability- Sea Water Resistant [price] => 59.95 [stock] => 20 [name] => size [value] => small ) [3] => Array ( [title] => Modest Swimsuit - Full body [description] => UV +50 Protection - Chlorine Resistant - Water Resistant - Quick Drying - Maximum Breathe Ability- Sea Water Resistant [price] => 59.95 [stock] => 20 [name] => size [value] => medium ) [4] => Array ( [title] => Modest Swimsuit - Full body [description] => UV +50 Protection - Chlorine Resistant - Water Resistant - Quick Drying - Maximum Breathe Ability- Sea Water Resistant [price] => 59.95 [stock] => 20 [name] => size [value] => large ) )

そこで、テーブルごとにクエリを分けて、それぞれ1つの結果セットを取得できるようにすることにしました。ただし、両方を組み合わせて、データを1つの配列としてコントローラーに戻し、ビューに表示できるようにします。これが私が2つのテーブルを照会した方法です。両方の結果を組み合わせる方法が必要です。

$this->db->select('p.title,
                           p.description,
                           p.price,
                           p.stock');
        $this->db->from('p');
        $this->db->where('p_id', $id);
        $result = $this->db->get();

        $this->db->select('name, value');
        $this->db->from('product_attrs');
        $this->db->where('p_id', $id);
        $result2 = $this->db->get();

誰か助けていただければ幸いです。ありがとうございました

編集:

私は今php.netでarray_merge()関数を見ていますが、これを行うと:

$result = $this->db->get();
        $array1 = $result->result_array();

$result2 = $this->db->get();
        $array2 = $result2->result_array();
        $data = array_merge($array1,$array2);
        return $data;

複数の配列を取得します:

Array ( [0] => Array ( [title] => Modest Swimsuit - Full body [description] => UV +50 Protection - Chlorine Resistant - Water Resistant - Quick Drying - Maximum Breathe Ability- Sea Water Resistant [price] => 59.95 [stock] => 20 ) [1] => Array ( [name] => Brand [value] => Modestly Active Swimwear ) [2] => Array ( [name] => Colour [value] => Black and Light Blue ) [3] => Array ( [name] => size [value] => small ) [4] => Array ( [name] => size [value] => medium ) [5] => Array ( [name] => size [value] => large ) )

私のビューで上記の配列から値を取得する方法はありますか?

4

1 に答える 1

2

もう1つの方法は、2番目の結果配列をループして、最初の配列に値を追加することです。

    // Get products results as an array
    $this->db->select('products.title,
                       products.description,
                       products.price,
                       products.stock');
    $this->db->from('products');
    $this->db->where('product_id', $id);
    $product = $this->db->get()->result_array();

    // Get product attributes as an array
    $this->db->select('name, value');
    $this->db->from('product_attributes');
    $this->db->where('product_id', $id);
    $product_attributes = $this->db->get()->result_array();

    // Loop through the results
    foreach($product_attributes as $attribute) {

         // Add results to original product array
         $product[$attribute['name']] = $attribute['value'];
    }

これにより、次のような配列が生成されます。

        [title]       => Modest Swimsuit - Full body 
        [description] => UV +50 Protection - Chlorine Resistant - Water Resistant - Quick Drying - Maximum Breathe Ability- Sea Water Resistant 
        [price]       => 59.95 
        [stock]       => 20
        [Brand]       => Modestly Active Swimwear 
        [Colour]      => Black and Light Blue
        [size]        => small
于 2013-03-01T01:43:43.953 に答える