循环sql结果显示行而不使用php重复

时间:2013-03-22 17:00:00

标签: php sql

我有2张桌子。 product_data包含有关product和images_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

我想列出所有产品以及图片。如何仅显示产品详细信息一次以及该产品的所有图像并转移到下一个产品?产品最多有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

2 个答案:

答案 0 :(得分:1)

你可以把它全部放在一个数组中:

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

然后,您可以通过循环创建的产品数组来控制输出。

答案 1 :(得分:0)

您可以使用GROUP_CONCAT

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

您将获得一个新行Pictures,其中包含以逗号分隔的所有图片。