首先,我已经尝试过搜索这个主题并且无处可寻(似乎找不到合适的关键词),所以如果这是重复的话,请告诉我们。
我一直试图从我的数据库中获取一些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查询来实现。有人能指出我正确的方向吗?
答案 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
。