查找与另一个 unix 时间戳同一天的所有记录 mysql
find all records that are within the same day of another unix timestamp mysql
假设我有一个 1497664242
的 unix 时间戳,即 Saturday, June 17, 2017 1:50:42 AM
我想在 table 中找到具有同一天时间戳的所有记录。
我尝试设置像 1494979200
这样的时间戳,Saturday, June 17, 2017 12:00:00 AM
认为我可以使用当天的一般时间并提取当天匹配的所有记录。
我正在尝试从特定日期开始循环并查找与该日期匹配的所有记录,然后增加 1 天直到今天 04/12/2019
$start_date = "05/17/2017";
while ($start_date != "04/12/2019") {
$timestamp = strtotime($start_date);
$sql_select = "SELECT * FROM table WHERE DATE(timestamp) = DATE(FROM_UNIXTIME($timestamp))";
$result_select = $GLOBALS['db']->query($sql_select);
while ($row = $result_select->fetch_array()) {
// will do stuff here
}
$start_date = date("m/d/Y", strtotime($start_date. "+1 day"));
}
如果您将时间戳转换为 DATE,即 2017-06-17 以及数据库中的时间戳字段,您应该会得到当天的任何行
现在我们知道 timestamp
列实际上被定义为 VARCHAR(),您必须这样做
SELECT *
FROM table
WHERE DATE(FROM_UNIXTIME(timestamp)) = '$start_date';
因此对于您的实际代码
$start_date = "2017-05-17";
while ($start_date != "2019-04-12") {
$sql_select = "SELECT *
FROM table
WHERE DATE(FROM_UNIXTIME(timestamp)) = '$start_date'";
$result_select = $GLOBALS['db']->query($sql_select);
while ($row = $result_select->fetch_array()) {
// will do stuff here
}
$start_date = date("Y-m-d", strtotime($start_date. "+1 day"));
}
我不会按照建议 (DATE(FROM_UNIXTIME(timestamp))
) 在 SQL 查询中使用函数,因为这会阻止 SQL 在时间戳列上使用索引。
我会在 php(一天的开始 + 结束)中计算两个日期时间,如下所示:
$dt = new DateTime('@' . $timestamp); // Should take care about timezones if you need
$dt_begin = $dt->format('Y-m-d 00:00:00');
$dt_end = $dt->format('Y-m-d 23:59:59');
如果您在数据库中的时间戳存储为整数:
SELECT
*
FROM
table
WHERE
timestamp BETWEEN UNIX_TIMESTAMP('$dt_begin') AND UNIX_TIMESTAMP('$dt_end')
如果您在数据库中的时间戳存储为 TIMESTAMP 或 DATETIME:
SELECT
*
FROM
table
WHERE
timestamp BETWEEN '$dt_begin' AND '$dt_end'
假设我有一个 1497664242
的 unix 时间戳,即 Saturday, June 17, 2017 1:50:42 AM
我想在 table 中找到具有同一天时间戳的所有记录。
我尝试设置像 1494979200
这样的时间戳,Saturday, June 17, 2017 12:00:00 AM
认为我可以使用当天的一般时间并提取当天匹配的所有记录。
我正在尝试从特定日期开始循环并查找与该日期匹配的所有记录,然后增加 1 天直到今天 04/12/2019
$start_date = "05/17/2017";
while ($start_date != "04/12/2019") {
$timestamp = strtotime($start_date);
$sql_select = "SELECT * FROM table WHERE DATE(timestamp) = DATE(FROM_UNIXTIME($timestamp))";
$result_select = $GLOBALS['db']->query($sql_select);
while ($row = $result_select->fetch_array()) {
// will do stuff here
}
$start_date = date("m/d/Y", strtotime($start_date. "+1 day"));
}
如果您将时间戳转换为 DATE,即 2017-06-17 以及数据库中的时间戳字段,您应该会得到当天的任何行
现在我们知道 timestamp
列实际上被定义为 VARCHAR(),您必须这样做
SELECT *
FROM table
WHERE DATE(FROM_UNIXTIME(timestamp)) = '$start_date';
因此对于您的实际代码
$start_date = "2017-05-17";
while ($start_date != "2019-04-12") {
$sql_select = "SELECT *
FROM table
WHERE DATE(FROM_UNIXTIME(timestamp)) = '$start_date'";
$result_select = $GLOBALS['db']->query($sql_select);
while ($row = $result_select->fetch_array()) {
// will do stuff here
}
$start_date = date("Y-m-d", strtotime($start_date. "+1 day"));
}
我不会按照建议 (DATE(FROM_UNIXTIME(timestamp))
) 在 SQL 查询中使用函数,因为这会阻止 SQL 在时间戳列上使用索引。
我会在 php(一天的开始 + 结束)中计算两个日期时间,如下所示:
$dt = new DateTime('@' . $timestamp); // Should take care about timezones if you need
$dt_begin = $dt->format('Y-m-d 00:00:00');
$dt_end = $dt->format('Y-m-d 23:59:59');
如果您在数据库中的时间戳存储为整数:
SELECT
*
FROM
table
WHERE
timestamp BETWEEN UNIX_TIMESTAMP('$dt_begin') AND UNIX_TIMESTAMP('$dt_end')
如果您在数据库中的时间戳存储为 TIMESTAMP 或 DATETIME:
SELECT
*
FROM
table
WHERE
timestamp BETWEEN '$dt_begin' AND '$dt_end'