2012-03-14 9 views
1

私は、このデータベース・テーブルの市場 "このテーブルを選択するには?

id  market_id  shows  clicks  event  data 
1   158   1000   300   on  2012-03-01 
2   158   1500   600   off  2012-03-14 
3   158   1500   600   on  2012-03-14 
4   158   2500   700   off  2012-03-20    

を持って、私はそれを選択して、このような配列を取得したい:

$array = array (
      array('from 2012-03-01 to 2012-03-14' => array('shows' => 500, 'clicks' => 300) 
      array('from 2012-03-14 to 2012-03-20' => array('shows' => 1000, 'clicks' => 100) 

それを行うには?私はそれをMysqlでやったのですか、それともPHPでやったことがありますか?

編集:

「を示している」配列では、1500年そのように計算 - 1000は、1500年には「イベント」のオフと1000「イベント」のあるテーブルからであるテーブルからある、の計算をクリックします同じ。

+0

何か試しましたか? PHPとMySQLについて読んでください。または、「PHP mysqlデータベースを取得する」を検索してください。 http://www.freewebmasterhelp.com/tutorials/phpmysql/4 Googleはあなたの友人です... –

+0

フィールドショーの場合は500と100、クリックの場合は同じものです。彼らはどのように計算されていますか? – neeraj

+0

2番目の配列の 'shows'値は1000ではなく、2つの範囲の日付の' shows'と 'clicks'の差です。 –

答えて

2

警告:私は本当にあなたの意図が何であるかを動作することはできませんので、これはしかし... はここにあなたのサンプルデータに働くクエリのより良い解決策があるかもしれません。少し説明するために、

SELECT 
    t2.data as from_date, 
    t1.data as to_date, 
    (t1.shows-t2.shows) as shows, 
    (t1.clicks - t2.clicks) as clicks 
FROM `market` t1 
    inner join market t2 
     on (t1.market_id=t2.market_id and t1.event='off' and t2.event='on' and t1.data>t2.data) 
    left join market t3 
     on (t1.data>t3.data and t3.event='on' and t3.data>t2.data) 
WHERE t3.id is null 

:クエリは、1つの後にイベント「オン」よりも「オフ」イベントを表した行のすべてのペアを見つけるために、それ自身の上にテーブルを結合します。これにより、すべてのペアが選択されます(2012-03-20 'off'と2012-03-01 'on')ので、もう一度LEFT JOINを実行して、 'on'行と「オフ」行

btw、私はあなたのサンプルの結果に誤りがあると思います。 2番目の結果の「ショー」の値は1000である必要があります。

+0

thx、それは私が好きなように動作します! –

+0

@DonatasVeikutis私はあなたがデータをどのように格納しているかという点で、あなたが最良の方法でそれについてやっていないと思うので、あなたがしようとしていることを正確に分析することを強くお勧めします。 – liquorvicar

関連する問題