我有这个数据库表'市场'
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中执行此操作?
编辑:
数组中的'shows'计算如此1500 - 1000,1500来自表'其中'event' off ,而1000来自表''event' on ,点击计算相同。
答案 0 :(得分: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
稍微解释一下:查询将表连接到其自身以查找所有行对,其中一行表示晚于“on”事件的“off”事件。这将获得所有对(甚至2012-03-20'关闭'和2012-03-01'开启')然后我们再次进行LEFT JOIN以检查'on'行和之间没有其他'on'事件'关闭'一行。
不过,我认为你的样本结果有误。第二个结果中“显示”的值应为1000。