2011-07-01 15 views
2

に参加します取引で販売された金額を確認するには、次のクエリを使用します。MySQLは基本的に私はこのような構造を持っている原因と乗算

SELECT targets.id,SUM(deal_sales.amount_sold) AS amount_sold 
FROM deal_sales 
INNER JOIN deals ON deals.id = deal_sales.deal_id 
INNER JOIN targets ON deals.target_id = targets.id 
WHERE targets.approved = 1 AND targets.active = 1 
GROUP BY targets.id 

その私がチャネルで取引によって販売されている量を見つけ、チャネルによってフィルタリングする必要があるときにうまく働いて、問題がある:

SELECT targets.id,SUM(deal_sales.amount_sold) AS amount_sold 
FROM deal_sales 
INNER JOIN deals ON deals.id = deal_sales.deal_id 
INNER JOIN targets ON deals.target_id = targets.id 
**INNER JOIN channels_deals ON channels_deals.deal_id = deals.id** 
WHERE targets.approved = 1 AND targets.active = 1 
GROUP BY targets.id 

私はチャンネルテーブルに参加する追加すると、AMOUNT_SOLDがあります取引が関係している各チャンネルが乗算されます。どうすればこの問題を回避できますか?

+0

はルール番号1および3は例えば

が存在するには、ディールを?,修正 'を有し、多くのに属し' またはチャネル(S) 'に属していますか'? ?? – fdaines

+0

とターゲットはどうですか?、取引はターゲットに属していますか? – fdaines

答えて

0

使用中または

SELECT targets.id,SUM(deal_sales.amount_sold) AS amount_sold 
FROM deal_sales 
INNER JOIN deals ON deals.id = deal_sales.deal_id 
INNER JOIN targets ON deals.target_id = targets.id 

WHERE targets.approved = 1 AND targets.active = 1 
    and 
    deals.id IN (SELECT deal_id from channels_deals where something = 1) 
GROUP BY targets.id 
+0

ありがとう、それはうまく働いた:D –

0
Try this: 

SELECT channels_deals.deal_id,SUM(deal_sales.amount_sold) AS amount_sold 
FROM deal_sales 
INNER JOIN deals ON deals.id = deal_sales.deal_id 
INNER JOIN targets ON deals.target_id = targets.id 
INNER JOIN channels_deals ON channels_deals.deal_id = deals.id 
WHERE targets.approved = 1 AND targets.active = 1 
GROUP BY channels_deals.deal_id 
関連する問題