0

私は次のSQLを持っています:

select distinct 
p.products_image, 
pd.products_name, 
p.products_id, 
p.products_model, 
p.manufacturers_id, 
m.manufacturers_name, 
p.products_price, 
p.products_tax_class_id,
pd.products_viewed, 
group_concat(p2i.icons_id separator ",") as icons_ids, 
group_concat(pi.icon_class separator ",") as icon_class, 
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 specials s on p.products_id = s.products_id 
left join manufacturers m on p.manufacturers_id = m.manufacturers_id 
join products_description pd on p.products_id = pd.products_id 
join products_to_categories p2c on p.products_id = p2c.products_id 
INNER JOIN products_specifications ps7 ON p.products_id = ps7.products_id 
LEFT JOIN products_to_icon p2i on p.products_id = p2i.products_id 
LEFT JOIN products_icons pi on p2i.icons_id = pi.icons_id 

where p.products_status = '1' 
and pd.language_id = '1' 
AND ps7.specification in ('Cotton' , 'Fireproof' ) 
AND ps7.specifications_id = '7' 
AND ps7.language_id = '1' 
and p2c.categories_id = '21' 

group by p.products_id order by pd.products_name

これは、1 つの製品が 1 つの仕様にのみ含まれている場合に完全に機能します。しかし、製品がこのように 2 つの仕様 (綿と耐火) を持っている場合、product_icons は 2 倍になります。

私は個別を選択していますが、2 つの仕様であるため、2 倍のアイコンを取得していて、その理由がわかりません (私の考えでは、アイコン ID を 2 回選択する前に個別に処理する必要があります)。

私は何が欠けていますか?

明確にするために更新します。

上記のクエリから取得した結果をここに示します: http://i.imgur.com/aD6JM0q.png

3 行目の列 icon_id に同じ icon_id が 2 回表示されていることに注意してください 5,1,5,1

私の目標は、これらの ID を 1 回だけ表示することなので、5,1 にする必要があります。

選択する仕様が多ければ多いほど、いくつかの異なる仕様に属する製品のため、さらに多くの繰り返しが発生する可能性が高くなります。

さらに明確にするために、products_to_icons および products_icons テーブルのサンプル画像をいくつか示します。

Products_to_icons: http://i.imgur.com/gBhlCri.png products_icons: http://i.imgur.com/1134Rb1.png

4

1 に答える 1

0

グループ連結が進行中ですが、その基礎として使用する実際のグループはありません。探している複数のアカウントを提供するために、クエリはグループを分割することをどのように認識しますか。

于 2013-05-15T17:43:29.173 に答える