【发布时间】:2017-04-03 22:16:42
【问题描述】:
我正在尝试为 MySQL 查询构建动态位置。用户可以选择他们想要多少小时或几天前的数据。我希望数据落在特定的几小时或几天前。
这是我现在正在使用但不起作用的代码:
$condition['dates'] = 'Specific';
$condition['date_operand'] = 'Hour(s) ago';
$condition['date_value'] = '3';
if ($conditions['dates'] == 'Specific' && !empty($conditions['date_value'])) {
if ($conditions['date_operand'] == 'Hour(s) ago') {
$where[] = "date_format(from_unixtime(l.date_updated), '%Y-%m-%d %H') = date_format(now() - interval ".$conditions['date_value']." hour, '%Y-%m-%d %H')";
}
else if ($conditions['date_operand'] == 'Day(s) ago') {
$where[] = "date_format(from_unixtime(l.date_updated), '%Y-%m-%d') = date_format(now() - interval ".$conditions['date_value']." day, '%Y-%m-%d')";
}
}
它似乎没有任何工作。 l.date_updated 是一个 unix 时间戳。您可以看到我正在努力实现的目标,但它不起作用。
更新
这里是示例中的 MySQL where 语句不起作用:
SELECT * FROM mytable l
WHERE DATE_FORMAT(FROM_UNIXTIME(l.date_updated), '%Y-%m-%d %H') = DATE_FORMAT(NOW() - INTERVAL 3 HOUR, '%Y-%m-%d %H')
它不会导致错误,只是没有选择我想要的。
最终更新
我的查询实际上很好。看来我的 PHP 代码正在连接到一个多年未更新的开发数据库。这就是为什么当我选择 3 天前它返回零行。
所以,请尊重一下,因为我是 Dion,白痴之王。
【问题讨论】:
-
如果这是一个 mysql 问题,我建议删除 PHP 并仅包含您的查询。如果我们能真正看到查询,这将使我们更容易看到查询出了什么问题。
-
我更新了 OP。
-
date_updated列的 MySQL 数据类型是什么?TIMESTAMP?BIGINT?UNSIGNED INT?请edit您的问题以显示该信息。 -
@O.Jones 这是一个
INT,包含一个unix时间戳。 -
您是否检查了
FROM_UNIXTIME(l.date_updated)的返回以确保日期在您期望的时区?你说它不是在选择你想要的,而是它在选择什么?有什么事吗?
标签: mysql unix-timestamp