Php 如何选择此表?

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

我有这个数据库表'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          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我强烈建议您准确分析您正在尝试做的事情,因为我怀疑您没有以最佳方式进行操作,尤其是在如何存储数据方面。