0

私の質問に関連する他のほとんどすべての投稿を読みましたが、決定的な回答を見つけることができません。これが既に回答されている場合は申し訳ありません。

基本的に、製品テーブルと画像テーブルがあり、1 つの製品に多くの画像を含めることができます。複数のクエリを実行するよりも、単一のクエリですべてのデータを取得する方がパフォーマンスが向上することを理解しています。

私は現在、完全にうまく機能する左結合クエリを使用していますが、私には非効率的です。

私の結果セットには多くの繰り返しデータがあり (私が求めているのはわかっています)、'products' テーブルには 50 個の (ish) 列が含まれているためです。'images' テーブルには 3 列しかないため、結果セットは次のようになりますこれ:

P_ID    P_NAME    P_DESC   -->(rest of product data)    I_ID    I_PATH    I_THUMB
001     a.prod    'This is a product'                   001-01  /a1.jpg   /a1t.jpg
001     a.prod    'This is a product'                   001-02  /a2.jpg   /a2t.jpg
001     a.prod    'This is a product'                   001-03  /a3.jpg   /a3t.jpg
001     a.prod    'This is a product'                   001-04  /a4.jpg   /a4t.jpg

I_ID は images テーブルの主キーであり、テーブル間の関係が存在する「products」テーブルの列です。

一部の製品には、「製品」情報を 10 回または 15 回複製する 10 個または 15 個の画像が含まれている場合がありますが、これは間違っているように思えます。必要のないときに、非常に多くの繰り返しデータを持つこと。

私が本当に求めているのは、これが最善のアプローチなのか、それともIDに基づいて製品を見つけるための2つのクエリ1と、クエリ1から製品に関連する画像を見つけるための別のクエリが必要かということです.

私は、1対多の関係が次のようなものを返すことを期待していました:

P_ID    P_NAME    P_DESC   -->(rest of product data)    I_ID    I_PATH    I_THUMB
001     a.prod    'This is a product'                   001-01  /a1.jpg   /a1t.jpg
NULL    NULL      NULL                                  001-02  /a2.jpg   /a2t.jpg
NULL    NULL      NULL                                  001-03  /a3.jpg   /a3t.jpg
NULL    NULL      NULL                                  001-04  /a4.jpg   /a4t.jpg

また、次のような多次元配列を取得するのが最善だと考えていました。

$resultset = array(
    'P_ID'=>'001', 
    'P_NAME'=>'a.prod',
    'P_DESC'=>'This is a product'
    (rest of product data) 
    'IMAGES'=>array(
        [0] => Array(
            'I_ID'=>'001-01',
            'I_PATH'=>'/a1.jpg', 
            'I_THUMB'=>'/a1t.jpg')
        [1] => Array(
             'I_ID'=>'001-02',
             'I_PATH'=>'/a2.jpg', 
             'I_THUMB'=>'/a2t.jpg')
        [2] => Array(
             'I_ID'=>'001-03',
             'I_PATH'=>'/a3.jpg', 
             'I_THUMB'=>'/a3t.jpg')
        [3] => Array(
             'I_ID'=>'001-04',
             'I_PATH'=>'/a4.jpg', 
             'I_THUMB'=>'/a4t.jpg')
    )
);

しかし、私は一生、このようにデータを取り戻す方法を考え出すことはできません-助けてください

4

1 に答える 1

0

2 つの別々のクエリを使用する必要があるようです。1 つは製品情報を返し、もう 1 つは画像を返します。そうしないと、クエリは、一致する各画像の製品テーブルからの情報を常に繰り返します。P_IDフィールドが各テーブルでインデックス化されている限り、パフォーマンスは問題になりません。

于 2014-05-28T12:51:37.047 に答える