0

編集済み

ブランド コード ID を含めていないことに気付きました。現在、マスター テーブルにはブランド ID が保持されています。1001 と 1002 だけが、他のブランドがサード パーティのブランドであることを気にするものです。

編集部分の終了

ここで提供されたヘルプに対するすべてのコミュニティに最初に感謝します。これは常に非常に役立ちます。私はmysqlの完全な初心者です。Java、javascript、現在phpを開発しています。現在のプロジェクトでは、データベースからデータを取得する必要があるという問題に直面しています。次のように:

たとえば、2 つの自社ブランドを含むさまざまなブランドを販売するショッピング サイトに、「puma」、「nike」、「ownbrand1」、および「ownbrand2」という名前を付けると、倉庫は「ownbrand1」と「ownbrand2」の在庫のみを保持します。顧客が他のブランドのいずれかを購入すると、第三者の会社が必要に応じて要求された製品を送信します. この Web サイトでは、多くの場合に結果をフィルタリングする選択肢を提供しています。そのうちの 1 つは、現時点で在庫があるアイテムのみを表示することです。

3 つのテーブルがあるとします。最初のテーブルを「在庫」と呼び、各製品 (自社ブランドのみ) の内部一意コードを含む在庫量を持ちます。製品 ID と 3 番目のテーブル「写真」には、写真情報と一般的な製品 ID を保持する Web サイトに表示する目的で写真が保持されます。

製品は、製品ごとに異なる一意の製品コード ID によって識別されます。つまり、同じ製品でもサイズまたは色が異なると、コード ID が異なります。2 番目の ID 一般的な製品 ID は、製品ごとにのみ異なります。つまり、サイズまたは色が異なることを意味します。同じ製品 ID と、一般的な製品の 1 つの写真である写真情報を持ちます。

------------------------------ 
          Stock 
------------------------------ 
ID            Name         Stock 
00001     puma1             0 
00002     puma2             0 
00003     ownbrand1(s)      0 
00004     ownbrand2(l)      0 
00005     nike              0 
00006     ownbrand1(l)      1 
00007     ownbrand1(m)      3 

---------------------------------------------
        Master 
---------------------------------------------
 ID         Name         GeneralId    BrandId
00001   puma1             pum001      1030
00002   puma2             pum001      1030
00003   ownbrand1(s)      owbr001     1001
00004   ownbrand2(l)      owbr002     1002
00005   nike              nike001     1040
00006   ownbrand1(l)      owbr001     1001
00007   ownbrand1(m)      owbr001     1001

------------------------------ 
        Photo 

------------------------------ 
GeneralId     Picture
pum001      pum001.jpg
owbr001     owbr001.jpg
owbr002    owbr002.jpg
nike001     nike001.jpg

在庫商品のみのオプションをクリックすると、ページにはサードパーティの商品が表示され、この場合は自社ブランドの在庫が 0 よりも大きい商品のみが表示されます。

望ましい結果

"puma" = 表示
"nike" = 表示
"ownbrand1" = 表示 (一部のサイズに在庫があるため)
"ownbrand2" = 表示なし (在庫がないため)

今、私は最初にこのクエリを実行してタスクを完了します:

$sql_query = "SELECT stock.*, master.*  FROM stock, master WHERE master.ID = stock.ID AND stock.stock > '0'"

次に、マスター テーブルから取得した在庫品目の generalID コードを使用して配列を生成し、次のクエリを生成します。

$sql_query = "SELECT * FROM master WHERE generalID NOT IN $previous_array"

2 つの配列を結合して製品ブランドの全リストを生成し、分類のためのフィルタリングをさらに行った後、この最後のクエリを実行することを示します。

$sql_query = "SELECT * FROM photo WHERE generalID IN $complete_array" 

今、この方法で必要な結果が得られますが、2000 を超えるアイテムと 30 以上のブランドで期待できるように、パフォーマンス速度が少し低下します。UNION クエリを実行しようとしましたが、アイデアを理解することができませんでした。

あなたのSQLマスターがこれを理解するのを手伝ってくれるなら、私はとても幸せなバニーになるでしょう.

4

1 に答える 1

1
SELECT *
FROM 
 (SELECT * 
 FROM stock 
   inner join master using (ID) 
   inner join photo using (generalID)
 WHERE (master.BrandId!=1001 and master.BrandId!=1002) or stock.stock>0
 ) as whatever
GROUP BY master.generalID
于 2013-03-15T01:44:36.777 に答える