2013-03-22 113 views
0

我有2個表。 product_data包含有關產品和product_images的所有詳細信息,其中包含每個產品的所有圖像。我加入了這兩個表格,但問題是有些產品有兩個以上的圖像。所以產品的行復制循環sql結果顯示行而不重複使用php

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次和該產品的所有圖像並移至下一個產品?有針對產品

SQL查詢最多6幅 - 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 
+0

你能告訴我們SQL查詢嗎? – 2013-03-22 17:01:09

+0

@HydraIO我已經添加了sql代碼.. – LiveEn 2013-03-22 17:23:58

回答

1

你可以把它們都放在一個數組:

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

那麼你將不得不通過創建的產品陣列循環您輸出更多的控制。

0

您可以使用GROUP_CONCAT

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

你會得到一個新的行包含Pictures所有圖像用逗號分隔。

+0

實際上有3個表基本上加入了1個表用於映射產品ID與圖像ID。我已經添加了sql代碼。是否有可能與我的SQL代碼使用concat? – LiveEn 2013-03-22 17:27:59

+0

是的,只需添加concat和group by。 – 2013-03-23 06:54:47