Php 如何选择此表?
我有这个数据库表'market'Php 如何选择此表?,php,mysql,arrays,sql,Php,Mysql,Arrays,Sql,我有这个数据库表'market' 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
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来自于“事件”处于打开状态的表,请单击“计算相同”。注意:我无法真正理解您的意图,因此可能有更好的解决方案,但。。。 下面是一个对示例数据有效的查询
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
稍微解释一下:查询将表自身连接到表中,以查找所有行对,其中一行表示一个“关闭”事件,该事件晚于一个“打开”事件。这将拾取所有对(即使是2012-03-20“关闭”和2012-03-01“打开”),因此我们再次执行左连接,以检查“打开”行和“关闭”行之间是否存在其他“打开”事件
顺便说一句,我认为你的样本结果有错误。第二个结果中“shows”的值应为1000。您尝试过什么吗?阅读一些关于PHP和MySQL的内容。或者搜索“PHP获取mysql数据库”。谷歌是你的朋友……现场秀的500和100等于多少,点击的500和100等于多少。它们是如何计算的?我认为第二个数组的
shows
值是1000而不是100,即两个范围日期的shows
和clicks
之间的差值。无论如何,不应为两个日期范围考虑2012-03-14,以消除冗余。它应该类似于2012-03-01到2012-03-14和2012-03-015到2012-03-20,或者可以生成周报。而且你的计算似乎不正确。如果2012年03月14日的数据为500,比如减去1500-1000,那么2010年03月01日的数据为1000。如何计算2010-03-01这听起来很像“请为我做开发者的工作”。@Donatasviekutis我强烈建议您准确分析您正在尝试做的事情,因为我怀疑您没有以最佳方式进行操作,尤其是在如何存储数据方面。