php - MySQL select 在 WHERE 子句中进行日期时间比较会导致 PHP 错误

标签 php mysql datetime

我有一个 MySQL 选择查询,WHERE 子句中只有很少的连接和多个条件。我在比较列 datestart 时遇到问题和dateend 。 这些可以适合给定的术语,也可以为空。两者的MySQL数据类型都是datetime 。 查询有问题的部分如下:AND (a.datestart > '".$datestart."' AND a.dateend < '".$dateend."') OR (a.datestart > '".$datestart."' AND a.dateend is null) OR (a.datestart is null AND a.dateend < '".$dateend."') OR (a.datestart is null AND a.dateend is null)) 如果我在没有这部分的情况下运行查询,它运行良好。如果使用,我会收到以下错误:Fatal error: Call to a member function fetch_assoc() on a non-object在线 while($rows = $result->fetch_assoc()) 。 我已经使用a.something语法位于查询的前面,因此连接工作正常。 有什么想法吗?

编辑:根据请求发布整个查询(不是来自代码,而是具有特定示例值的示例。如果您需要 php 代码,我也会添加它)。

SELECT a.id AS id, t.title AS title, t.shortDescription AS shortDescription, p.prices_value AS prices_value, c.symbol AS symbol, a.rating AS rating FROM tblactivity a inner join tblactivitytranslations t on a.id = t.activityId inner join tblprices p on a.price = p.id inner join tblcurrencies c on p.currency = c.id WHERE t.lang = '0' AND t.title LIKE '%Some%' AND p.currency = '0' AND (false or (prices_value >= 0 and prices_value <= 25) or (prices_value >= 25 and prices_value <= 50) or (prices_value >= 50 and prices_value <= 75) or (prices_value >= 75 and prices_value <= 100) or (prices_value >= 100)) AND (a.datestart > '2000-1-1' AND a.dateend < '2079-1-1') OR (a.datestart > '2000-1-1' AND a.dateend is null) OR (a.datestart is null AND a.dateend < '2079-1-1') OR (a.datestart is null AND a.dateend is null))

最佳答案

再次检查您的 SQL 查询。 WHERE 子句中的括号没有相加。您以 null 后面的双括号结束,而没有成对的左括号。

此外,还有一个 false 卡在没有定义的列上(这可能是 SO 帖子上的一个拼写错误,因为您提到您删除了最后一条语句并且一切都运行良好)。

顺便说一句,您的 WHERE 子句可能有冗余。 prices_value 的条件之一:

(prices_value >= 0 and prices_value <= 25) 
or (prices_value >= 25 and prices_value <= 50) 
or (prices_value >= 50 and prices_value <= 75) 
or (prices_value >= 75 and prices_value <= 100) 
or (prices_value >= 100)

可以将所有 OR 子句组合成一个包含条件,因为所有端点都连接并超过 100:

(prices_value >= 0) 

关于php - MySQL select 在 WHERE 子句中进行日期时间比较会导致 PHP 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28016216/

相关文章:

mysql - 如何统计0笔订单?

MySQL 正则表达式 : Find string exept between two characters

ruby - 我如何在普通的旧 ruby (非轨道)中使用轨道助手 "distance_of_time_in_words"

c# - DateTime.TryParseExact 不返回正确的响应

java - 将 24 小时时间中的字符串转换为 12 小时 AM PM 时间

php - 使用 MySQL 命令提交 php 时出现内部服务器错误

php - 有人能解释一下 Laravel 关系是如何运作的吗?

javascript - 当状态为 "paid"时禁用支付按钮

php - Zend Framework EAV 实现

php - CSS - 将 block 放在中间