0

優れたMySQLコーダーの課題は次のとおりです。html/PHPページに表示されるMySQLレポートを作成するためのクエリに関するヘルプをいただければ幸いです。

データを収集して保存する方法と、PHPレポートのレイアウトはわかっていますが、クエリの構造についてはわかりません。

「訪問者」と「購入者」の2つのMySQLテーブルがあります。

  1. 訪問者テーブル–sales_repと彼らが自分で作成した多くのマーケティングコードの1つを識別する特定のURLを介してアクセスする当社のWebサイトへの訪問者用。
  2. バイヤーテーブル–何かを購入する人のために。

訪問者は、次のリンクから当社のWebサイトにアクセスできます。

www.sales_rep.website.com/index.php?marketing=code1/code2/code3

「訪問者」テーブルには、次の3つのフィールドが含まれています。

  • sales_rep
  • 日にち
  • Marketing_CODE –(この場合、文字列の「code1 / code2 / code3」になりますが、各sales_repは、「code1a / codeTX/codeM2」や「market-z/ad」など、広告活動に基づいて複数のmarketing_CODESを持つことができます。 -123 ")

訪問者が何かを購入すると、それらを「購入者」テーブルに追加します。これには次のものが含まれます。

  • sales_rep
  • 日にち
  • Marketing_TYPE –( "URL"、 "referral"、またはその他のタイプの場合があります)
  • Marketing_VALUE –(marketing_TYPEがURLの場合はmarketing_CODEになります)

特定の営業担当者ごとに、指定された月について、marketing_TYPE == "URL"についてのみ、マーケティングコードでソートされたレポートを表示する必要があります。

このレポートでは、次のように、marketing_CODEごとの訪問者と購入者のアクティビティの週ごとの内訳を表示する必要があります。

テーブルの例

わかりやすくするために、上記の表の第1週では、8人の訪問者が「code1 / code2 /」のリンクからWebサイトにアクセスし、そのうち5人が何かを購入しました。

クエリを次のように開始しようとしましたが、どこに行けばよいかわかりません。

  1. $chosen_month = $_POST['chosen_month'];
  2. SELECT * FROM visitors INNER JOIN buyers ON sales_rep WHERE marketing_type = "URL" AND sales_rep = '$sales_rep' AND date('Y-m') = $'chosen_month' ;
  3. whileステートメントを使用して、見つかった各レコードのテーブルセルを生成します。これを使用して、すべてのレコードを一覧表示する方法を知っていますが、個別でないレコードを一度表示し、それらのカウントを表示してから、個別のレコードを表示する方法を理解することはできません。

お手数をおかけしますが、よろしくお願いいたします。

4

1 に答える 1

1

これがあなたの質問に対する私の提案です。

まず、日付フィールドに基づいて週番号を見つける必要があったので、この質問の答えを使用しました:

SELECT  WEEK(dateField, 5) -
        WEEK(DATE_SUB(dateField, INTERVAL DAYOFMONTH(dateField) - 1 DAY), 5) + 1

読みやすくするために、これからは上記の結果を@weekと呼びます:)

次に、テーブルの1つだけから始めて、営業担当者が毎月何人の訪問者を獲得したかを確認しました。

select rep, 
  , SUM(CASE @week WHEN 1 THEN 1 ELSE 0 END) as Week1
  , SUM(CASE @week WHEN 2 THEN 1 ELSE 0 END) as Week2
  , SUM(CASE @week WHEN 3 THEN 1 ELSE 0 END) as Week3
  , SUM(CASE @week WHEN 4 THEN 1 ELSE 0 END) as Week4
  , COUNT(*) as Total
from visitors
group by rep

この情報を取得したので、バイヤーにも同じものを使用して、次のようにこれら2つのサブクエリの結果を結合します。

select v.rep
, v.Week1 , b.Week1
, v.Week2 , b.Week2
, v.Week3 , b.Week3
, v.Week4 , b.Week4
, v.Total, b.Total
from (
     select rep, 
        , SUM(CASE @week WHEN 1 THEN 1 ELSE 0 END) as Week1
        , SUM(CASE @week WHEN 2 THEN 1 ELSE 0 END) as Week2
        , SUM(CASE @week WHEN 3 THEN 1 ELSE 0 END) as Week3
        , SUM(CASE @week WHEN 4 THEN 1 ELSE 0 END) as Week4
        , COUNT(*) as Total
     from visitors
     group by rep) as v
     left join (select rep, 
                 , SUM(CASE @week WHEN 1 THEN 1 ELSE 0 END) as Week1
                 , SUM(CASE @week WHEN 2 THEN 1 ELSE 0 END) as Week2
                 , SUM(CASE @week WHEN 3 THEN 1 ELSE 0 END) as Week3
                 , SUM(CASE @week WHEN 4 THEN 1 ELSE 0 END) as Week4
                 , COUNT(*) as Total
                from visitors
                group by rep) as b on v.rep = b.rep

これはあなたが探しているものでなければなりません!

これがあなたの状況のた​​めに更新された上記と同じコードです:

select v.rep
    , v.Week1 , b.Week1
    , v.Week2 , b.Week2
    , v.Week3 , b.Week3
    , v.Week4 , b.Week4
    , v.Total, b.Total
from (
        select rep
          , SUM(CASE WEEK(the_date, 5) -
            WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
            WHEN 1 THEN 1 ELSE 0 END) as Week1
      , SUM(CASE WEEK(the_date, 5) -
            WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
            WHEN 2 THEN 1 ELSE 0 END) as Week2
      , SUM(CASE WEEK(the_date, 5) -
        WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
            WHEN 3 THEN 1 ELSE 0 END) as Week3
      , SUM(CASE WEEK(the_date, 5) -
        WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
            WHEN 4 THEN 1 ELSE 0 END) as Week4
      , COUNT(*) as Total
        from visitors
        where sales_rep = '$sales_rep' AND date('Y-m') = $'chosen_month'
        group by rep ) as v
  left join (
        select rep
          , SUM(CASE WEEK(the_date, 5) -
            WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
            WHEN 1 THEN 1 ELSE 0 END) as Week1
      , SUM(CASE WEEK(the_date, 5) -
            WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
            WHEN 2 THEN 1 ELSE 0 END) as Week2
      , SUM(CASE WEEK(the_date, 5) -
        WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
            WHEN 3 THEN 1 ELSE 0 END) as Week3
      , SUM(CASE WEEK(the_date, 5) -
        WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
            WHEN 4 THEN 1 ELSE 0 END) as Week4
      , COUNT(*) as Total
        from buyers
        where marketing_type = "URL" AND sales_rep = '$sales_rep' AND date('Y-m') = $'chosen_month'
        group by rep) as b on v.rep = b.rep
于 2012-11-07T19:52:44.523 に答える