MySQL クエリに少し問題があり、サイトで今のところ答えが見つかりません (見逃しているのでしょうか?)
問題は、サブサブクエリ内でルートの親の値を取得することです..
簡単に言えば、プロジェクトは広告マネージャーです。複数の広告を含むことができ、各広告に異なる価格を設定できる 1 つのキャンペーンについて、1 か月に費やされた金額を調べたいと考えています。したがって、結果は Campaign ごとにグループ化されますが、費やされた金額は、 Campaign ごとにグループ化する前に Ad ごとにグループ化する必要があります。他の情報を取得する必要があるため、サブクエリを作成します。
実際のクエリは次のとおりです。
SELECT
COUNT(l.lgs_mkt_user_campaign_keyid) AS nbClics,
l.mkt_user_ad_keyid,
a.mkt_user_ad_ppc,
a.usr_user_keyid,
r.mkt_rel_user_campaign_ad_score,
c.mkt_user_campaign_ppm,
(
SELECT SUM(usr_user_money_spent) FROM (
SELECT
(a2.mkt_user_ad_ppc * COUNT(l2.lgs_mkt_user_campaign_keyid)) AS usr_user_money_spent
FROM
lgs_mkt_user_campaigns l2
LEFT JOIN
mkt_user_ads a2 ON a2.mkt_user_ad_keyid = l2.mkt_user_ad_keyid
WHERE
l2.mkt_user_campaign_keyid = l.mkt_user_campaign_keyid
GROUP BY
l2.mkt_user_ad_keyid
) AS Sub
) AS usr_user_money_spent
FROM
lgs_mkt_user_campaigns l
LEFT JOIN
mkt_user_ads a ON a.mkt_user_ad_keyid = l.mkt_user_ad_keyid
LEFT JOIN
mkt_rel_user_campaigns_ads r ON r.mkt_user_ad_keyid = l.mkt_user_ad_keyid
LEFT JOIN
mkt_user_campaigns c ON c.mkt_user_campaign_keyid = l.mkt_user_campaign_keyid
WHERE
l.lgs_mkt_user_campaign_datecrea BETWEEN '2012-11-01' AND '2012-11-30'
AND l.lgs_mkt_user_campaign_is_clic = 1
GROUP BY
c.mkt_user_campaign_keyid
問題は WHERE 句の 17 行目にあります。l2.mkt_user_campaign_keyid = l.mkt_user_campaign_keyid
エイリアス「l」は、サブサブクエリでは処理できません(これを達成するための他の解決策は見つかりません...)
この WHERE 句に別のサブクエリを書きたくないのですが、同じものを取得するl.mkt_user_campaign_keyid
ために、そのために「ちょうど」巨大なリクエストを与えるので、それは悪い考えだと思います...
これを達成する方法を知っている人はいますか?
どうもありがとう、そして1)私の英語で申し訳ありません;)、2)解決策がすでにstackoverflowにある場合は申し訳ありませんが、見つかりませんでした:/
[編集]
サブクエリを説明する詳細:
mkt_user_campaigns
: すべてのキャンペーンが含まれ、外部キーとしてユーザーが含まれますmkt_user_ads
: すべての広告とユーザーを外部キーとして含むmkt_rel_user_campaigns_ads
: 広告をキャンペーンにバインドしますlgs_mkt_user_campaigns
: 広告のすべてのクリックを記録します
プリンシパル クエリはキャンペーンに関する情報を取得するため、キャンペーンの費用を知る必要があります。サブクエリは、各キャンペーンの費用を取得しようとします。
詳細を含むサブクエリ:
キャンペーンについて、クリックされたすべての広告、クリック回数、および最終的なコスト (ppc = クリックあたりの価格) を見つけようとします。ここで、WHERE 句には、ログの datecrea などの詳細が欠けていますが、読みやすくするために軽量化しました。
このサブクエリは、プリンシパル クエリと同じキャンペーンの結果を返す必要があります。これがここでの難点です。