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 回答