gpt4 book ai didi

php - 查询 where timestamp < timestamp 不起作用?

转载 作者:行者123 更新时间:2023-11-29 04:36:57 26 4
gpt4 key购买 nike

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,我真的可以使用一些建议谢谢你的时间

最佳答案

这可能是因为您在查询中使用了 ORAND 的条件。

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";

关于php - 查询 where timestamp < timestamp 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39018626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com