0

我有一个有 5 列的表格,其中一个是日期,每次我的事件发生在那个日期,我在它的列上放一个 1,所以我的表格看起来像:

数据;;;;;;;;;;; 0_6 ;;;;;;;;;; 6_12;;;;;;;;;; 12_18;;;;;;;;;;; 18_24

2013-02-01     ....1.................0...................1......................0 <br>
2013-02-01    ....0.................0...................1......................0 <br>
2013-02-01    ....0.................1...................1......................0 <br>
2013-02-02    ....0.................0...................1......................0 <br>
2013-02-04    ....1.................0...................0......................0 <br>

所以我想要做的是获取事件发生当天所有列的总和并将其传递给 php 数组。我有开始日期和结束日期,我正在尝试:
在哪里$diferenca = difference in days between end and start day

for($i=0; $i < $diferenca;$i++) {
$query = $con->("SELECT Data, sum(0h_6h) AS sum0_6,sum(6h_12h) AS sum6_12,sum(12h_18h) AS sum12_18,sum(18h_24h) AS sum18_24
FROM mytable
WHERE Data = 'Date_format('DATE(data)+$i','%Y-%M-%e')'
ORDER BY Data ASC
LIMIT 1");

while($row = $query->fetch(PDO::FETCH_ASSOC)....
}

但我认为我的 mysql 查询有问题,有人可以帮我做这个选择吗?我应该使用什么 where 子句来获得我的结果?提前致谢!!

4

2 回答 2

2

尝试 :

$con->("SELECT 
            Data, 
            sum(0h_6h) AS sum0_6,
            sum(6h_12h) AS sum6_12,
            sum(12h_18h) AS sum12_18,
            sum(18h_24h) AS sum18_24
FROM 
      mytable
WHERE 
      Data BETWEEN start_day AND end_day
GROUP BY 
      Data
ORDER BY
      Data ASC");

使用实际日期更改 start_day 和 end_day,前提是数据是日期类型列。如果没有,则更改 WHERE 子句以满足您的需要。在我看来,您需要的是 GROUP BY 部分

于 2013-10-21T19:10:36.833 回答
1

这不起作用?

SELECT Data, sum(`0h_6h`) AS sum0_6,
sum(`6h_12h`) AS sum6_12,
sum(`12h_18h`) AS sum12_18,
sum(`18h_24h`) AS sum18_24
FROM mytable
WHERE Data between '2013-02-01' and '2013-02-04' 
/* Date_format('DATE(data)+$i','%Y-%M-%e') */
GROUP BY data
ORDER BY Data ASC
/*LIMIT 1 */

请注意,我已删除 LIMIT 1 子句,在 WHERE 子句中添加了两个日期,您可以将其替换为“开始”日期和“结束日期”。添加了 GROUP BY。

如果您有 10 天的开始日期和停止日期,那么您的 PHP 循环将运行 10 次,这不是从数据库中获取数据的好方法。相反,一次从服务器获取所有数据,然后在客户端进行处理。

希望这对你有用。

于 2013-10-21T19:57:04.033 回答