0

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 などの詳細が欠けていますが、読みやすくするために軽量化しました。

このサブクエリは、プリンシパル クエリと同じキャンペーンの結果を返す必要があります。これがここでの難点です。

4

0 に答える 0