MySQL选择与WHERE子句中的日期时间比较导致PHP错误

时间:2015-01-18 23:55:49

标签: php mysql datetime

我有一个MySQL选择查询,在WHERE子句中几乎没有连接和多个条件。我在比较列datestartdateend时遇到了问题。 这些可以适合给定的术语,也可以为空。两者的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))

1 个答案:

答案 0 :(得分:0)

再次检查您的SQL查询。 WHERE子句中的括号不会相加。在没有配对的左括号的情况下,您在null之后以双括号结束。

此外,还有一个false没有定义列(这可能是SO帖子上的拼写错误,因为你提到你取消了最后一个语句并且一切运行正常)。

顺便说一下,你的WHERE子句可能有冗余。关于price_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)