查询 where timestamp < timestamp 不起作用?
query where timestamp < timestamp not working?
2016-08-18 04:52:14 是我从数据库中获取的时间戳,用于跟踪我要从哪里加载更多记录,这些记录少于该时间
这是代码
foreach($explode as $stat){
if($statement == ""){
$statement .= "`userid` = '$stat'";
}else{
$statement .= "OR `userid` = '$stat'";
}
}
}
$result = $link->query("SELECT * FROM `things` WHERE $statement AND `times` < '$time' ORDER BY `times` DESC LIMIT 20");
times
是我要查询的时间戳字段,但它返回的日期大于
例子
id--------------times
63 8/18/2016 1:25:43 AM
---
---
---
---
---
93 8/18/2016 6:41:12 AM
所以 $time 变量是 2016-08-18 04:52:14 但它返回第 93 行下限 20,我真的可以使用一些建议谢谢你的时间
这可能是因为您使用 OR
和 AND
的查询条件。
SELECT * FROM `things`
WHERE ($statement)
AND `times` < '$time'
ORDER BY `times` DESC
LIMIT 20"
通过将 $statement
括起来,您可以避免将 OR
附加到时间比较中。
说明
我相当确定发生了什么,如果你调试由你的 PHP 构建的实际查询,它看起来像这样吗:
WHERE `user_id` = 1 OR `user_id` = 2 AND `times` < '2016-08-18 04:52:14'
因此,此示例中的第二个 user_id
被视为 times
条件的一部分,如下所示:
WHERE
(`user_id` = 1)
OR
(`user_id` = 2 AND `times` < '2016-08-18 04:52:14')
你真正想要的是:
WHERE
(`user_id` = 1 OR `user_id` = 2)
AND
(`times` < '2016-08-18 04:52:14')
额外改进
无论如何,您都可以使用 SQL IN
运算符作为替代方案,这会使您的代码更加优雅且更易于阅读。
因此,如果您的用户 ID 是逗号分隔的字符串或其他内容,请不要费心分解它们(因为我假设您已经从您的代码中完成了)。只需将它们传递给查询:
$userIds = "1, 2, 3, 4";
$sql = "SELECT *
FROM `things`
WHERE `user_id` IN($userIds)
AND `times` < '$time'
ORDER BY `times` DESC
LIMIT 20";
尝试将您的 $time 转换为 unixtimestamp 并像这样查询:
WHERE $statement AND UNIX_TIMESTAMP(`times`) < '$time' ORDER BY `times`
2016-08-18 04:52:14 是我从数据库中获取的时间戳,用于跟踪我要从哪里加载更多记录,这些记录少于该时间
这是代码
foreach($explode as $stat){
if($statement == ""){
$statement .= "`userid` = '$stat'";
}else{
$statement .= "OR `userid` = '$stat'";
}
}
}
$result = $link->query("SELECT * FROM `things` WHERE $statement AND `times` < '$time' ORDER BY `times` DESC LIMIT 20");
times
是我要查询的时间戳字段,但它返回的日期大于
例子
id--------------times
63 8/18/2016 1:25:43 AM
---
---
---
---
---
93 8/18/2016 6:41:12 AM
所以 $time 变量是 2016-08-18 04:52:14 但它返回第 93 行下限 20,我真的可以使用一些建议谢谢你的时间
这可能是因为您使用 OR
和 AND
的查询条件。
SELECT * FROM `things`
WHERE ($statement)
AND `times` < '$time'
ORDER BY `times` DESC
LIMIT 20"
通过将 $statement
括起来,您可以避免将 OR
附加到时间比较中。
说明
我相当确定发生了什么,如果你调试由你的 PHP 构建的实际查询,它看起来像这样吗:
WHERE `user_id` = 1 OR `user_id` = 2 AND `times` < '2016-08-18 04:52:14'
因此,此示例中的第二个 user_id
被视为 times
条件的一部分,如下所示:
WHERE
(`user_id` = 1)
OR
(`user_id` = 2 AND `times` < '2016-08-18 04:52:14')
你真正想要的是:
WHERE
(`user_id` = 1 OR `user_id` = 2)
AND
(`times` < '2016-08-18 04:52:14')
额外改进
无论如何,您都可以使用 SQL IN
运算符作为替代方案,这会使您的代码更加优雅且更易于阅读。
因此,如果您的用户 ID 是逗号分隔的字符串或其他内容,请不要费心分解它们(因为我假设您已经从您的代码中完成了)。只需将它们传递给查询:
$userIds = "1, 2, 3, 4";
$sql = "SELECT *
FROM `things`
WHERE `user_id` IN($userIds)
AND `times` < '$time'
ORDER BY `times` DESC
LIMIT 20";
尝试将您的 $time 转换为 unixtimestamp 并像这样查询:
WHERE $statement AND UNIX_TIMESTAMP(`times`) < '$time' ORDER BY `times`