有序的SQL时间戳提取

时间:2015-01-06 11:25:14

标签: php mysql

首先,我已经尝试过搜索这个主题并且无处可寻(似乎找不到合适的关键词),所以如果这是重复的话,请告诉我们。

我一直试图从我的数据库中获取一些time_stamp并按间隔命令它们。例如,我运行一个查询,如

"SELECT `time_stamp` FROM registo albufeira ".$nome."` WHERE `cota` > '".$piInfo['cota max']."'" 

并使用php代码来安排它的间隔。

例如,如果我的time_stamps对应于以下日期:

2014-12-30 23:51:00
2014-12-30 23:52:00
2014-12-30 23:53:00
2014-12-30 23:54:00
2014-12-31 01:35:00
2014-12-31 01:36:00
2014-12-31 01:37:00

我得到一个间隔数组,如:

[0] => Array
    [0] => 2014-12-30 23:51:00
    [1] => 2014-12-30 23:54:00
[1] => Array
    [0] => 2014-12-31 01:35:00
    [1] => 2014-12-31 01:37:00

我已经设法获取php代码以获得想要的结果,但是我觉得这可以使用单个SQL查询来实现。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

SQL查询可能是

SELECT 
  DATE_FORMAT(`time_stamp`,'%y-%m-%d') AS day_id, 
  MIN(`time_stamp`) AS start_ts,    MAX(`time_stamp`) AS end_ts 
FROM registo
GROUP BY DATE_FORMAT(`time_stamp`,'%y-%m-%d')

答案 1 :(得分:1)

试试这个:

SELECT DATE(time_stamp) AS `day`, MIN(time_stamp) AS first, MAX(time_stamp) AS last
FROM `registo albufeira`      # fix the table name
WHERE `cota` > '...'          # put your condition here
GROUP BY DATE(time_stamp) 

它会产生类似的东西:

+------------+---------------------+---------------------+
| day        | first               | last                |
+------------+---------------------+---------------------+
| 2014-12-30 | 2014-12-30 23:51:00 | 2014-12-30 23:54:00 |
| 2014-12-31 | 2014-12-31 01:35:00 | 2014-12-31 01:37:00 |
+------------+---------------------+---------------------+

然后您可以从PHP代码中以所需的格式存储它。

$data = array();
while ($row = mysqli_fetch_assoc($result)) {
    $data[] = array($row['first'], $row['last']);
}

上面的代码将生成您在问题中转储的数据结构,但我强烈建议您使用字符串键('day','first','last',无论您想要什么)而不是数字键:

$data = array();
while ($row = mysqli_fetch_assoc($result)) {
    $data[$row['day']] = $row;
}

添加print_r($data);并检查差异。

<强>更新

如果间隔的长度不是一天而是300秒,则将DATE(time_stamp)替换为UNIX_TIMESTAMP(time_stamp) DIV 300