2

製品テーブルから一意の製品を正常に取得して表示するクエリがあります。ミックスにアイコンテーブルを追加しようとしています。一部の製品には複数のアイコンを含めることができます。問題は、結合のみを使用しようとしていることです。たとえば、製品に2つのアイコンがある場合、その1つの製品に対して2つの行が選択されます。

これが私のSQLです:

    SELECT p.products_image, 
           pd.products_name, 
           p.products_id, 
           p.products_model, 
           p.manufacturers_id, 
           p.products_price, 
           p2i.icons_id, 
           p.products_tax_class_id, 
           IF(s.status, s.specials_new_products_price, NULL)             AS 
           specials_new_products_price, 
           IF(s.status, s.specials_new_products_price, p.products_price) AS 
           final_price 
    FROM   products p 
           LEFT JOIN manufacturers m 
                  ON p.manufacturers_id = m.manufacturers_id 
           LEFT JOIN specials s 
                  ON p.products_id = s.products_id 
           LEFT JOIN products_to_categories p2c 
                  ON p.products_id = p2c.products_id 
           LEFT JOIN products_description pd 
                  ON p.products_id = pd.products_id 
           LEFT JOIN products_to_icon p2i 
                  ON p.products_id = p2i.products_id 
    WHERE  p.products_status = '1' 
           AND pd.language_id = '1' 
           AND p2c.categories_id = '36'
4

1 に答える 1

9

GROUP BY最後に句を追加します。それでもすべてのアイコンIDが必要な場合は、group_concat

例えば:

SELECT p.products_image, 
       pd.products_name, 
       p.products_id, 
       group_concat(p2i.icons_id separator ",") as icons_ids
       (...)
WHERE  p.products_status = '1' 
       AND pd.language_id = '1' 
       AND p2c.categories_id = '36'
GROUP BY p.products_id
于 2012-07-05T20:20:13.497 に答える