2

私は3つのSQLテーブルを持っています

product_data- 製品に関するすべての詳細を保存します

product_name  | description | ucode | heaven | star_rating | product_id

product_images- 写真 ID を含むすべての画像 URL (各商品には 1 つ以上の画像が割り当てられています)

img_url | photo_id

product_img_map- 製品に正しい画像をマッピングします

photo_id  | product_id

があれば簡単product_idproduct_images結合できたのですが、写真と製品をマッピングする別の表があります。

すべての製品の詳細と製品の画像を照会する方法を誰か教えてもらえますか?

4

7 に答える 7

2

JOIN両方のテーブルをproduct_data:

SELECT *
FROM product_data p
LEFT JOIN product_img_map im ON im.product_id = p.product_id
LEFT JOIN product_images i ON i.photo_id = im.photo_id

LEFT JOINその製品に関連付けられた写真がない場合でも、製品情報を取得していました。

于 2013-03-22T09:27:59.580 に答える
0

すべての結合でキーを指定するため、必要な数のキーでいくつでも結合を組み合わせることができます。

SELECT *
    FROM product_data
    LEFT JOIN product_img_map
        ON product_data.id=product_img_map.product_id
    LEFT JOIN product_images
        ON product_images.id=product_img_map.photo_id

テーブル名が短縮されたこのバリアントも頻繁に見られますが、同じことであり、見た目が異なるだけです。

SELECT *
    FROM product_data d
    LEFT JOIN product_img_map m
        ON d.id=m.product_id
    LEFT JOIN product_images i
        ON i.id=m.photo_id

関連する画像ごとに1回ずつ、各商品のラインを複数回取得します。これは正常ですが、おそらくそれを解析するためにいくつかのコードを書く必要があります。これを簡単にすることが、ORM( "Object Relational Mappers")が頻繁に使用される理由の1つです。これにより、データや画像を好きなようにループしやすくなります。

于 2013-03-22T09:32:46.343 に答える
0
select pi.img_url, pi.photo_id,pim.product_id,pd.* 
   FROM product_images as pi 
   left join product_img_map as pim on pim.photo_id  = pi.photo_id 
   left join product_data as pd on pd.product_id =  pim.product_id;

上記のクエリを試してください。

于 2013-03-22T09:34:46.623 に答える
0
 product(product_id*)

 image(image_id*)

 product_image(product_id*,image_id*)

 * = (component of) PRIMARY KEY

 SELECT * 
   FROM product p 
   LEFT 
   JOIN product_image pi 
     ON pi.product_id = p.product_id
   LEFT
   JOIN image i
     ON i.image_id = pi.image_id;
于 2013-03-22T09:29:55.317 に答える
-1

内部結合を行う必要があります。以下を試してください

 select * from product_data pd
 left join product_img_map  im on pd. product_id = im.product_id
 left join product_images pi on im.photo_id   = pi.photo_id  

関連する写真がない商品もあるかもしれないので、左結合が正しいと思います。

于 2013-03-22T09:29:09.033 に答える
-1

これを試して:

Select * From product_data pd Inner JOin product_img_map pim on pd.product_id=pim.product_id Inner JOin product_images pm on pm.photo_id=pim.photo_id
于 2013-03-22T09:29:20.850 に答える
-1
select * from product_data pd left join product_img_map pim 
on pd.product_id = pim.product_id
left join product_images pi on
pim.photo_id = pi.photo_id
于 2013-03-22T09:29:29.897 に答える