0

私は2つのテーブルを持っています。product_data には製品に関するすべての詳細が含まれ、product_images には各製品のすべての画像が含まれます。両方の表を結合しましたが、問題は、一部の製品に 2 つ以上の画像があることです。そのため、製品の行が重複しています

product_name  | description | ucode |  star_rating | product_image

cheese            packed       321        3            1.jpg
cheese            packed       321        3            1.jpg
cheese            packed       321        3            3.jpg
meat              canned       F98        1            meat1.jpg
milk              canned       G43        5            milk1.jpg
milk              canned       G43        5            milk2.jpg
milk              canned       G43        5            milk3.jpg
milk              canned       G43        5            milk4.jpg

foreach ループがある場合

 foreach ($products as $product):
    //display the product details once and all the images for that product
    endforeach;

出力は次のようになります。

product 1          1.jpg
                   2.jpg
                   3.jpg
product 2          meat1.jpg
product 3          milk1.jpg
                   milk2.jpg
                   milk3.jpg
                   milk4.jpg

すべての商品を画像とともに一覧表示したい。商品の詳細を 1 回だけ表示し、その商品のすべての画像を表示して、次の商品に移動するにはどうすればよいですか? 商品の画像は最大 6 枚です

SQL クエリ - 3 つのテーブルが結合されました

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
4

2 に答える 2

1

すべてを配列に入れることができます:

foreach ($products as $product) {
    ....
    $product_array[$product_name]['images'][] = $product_image;
    ....
}

次に、作成した製品配列をループすることで、出力をより細かく制御できます。

于 2013-03-22T17:08:50.063 に答える
0

使用できますGROUP_CONCAT

SELECT `product_data`.*,
GROUP_CONCAT(`product_data`.`product_image`) as Pictures
FROM `product_data`
GROUP BY `product_data`.`product_name`

Picturesコンマで区切られたすべての画像を含む新しい行が表示されます。

于 2013-03-22T17:07:30.120 に答える