我正在运行以下MySQL查询来过滤价格在一定范围内的商品数量。
SELECT `listing_id`, `price` FROM (`listings`)
WHERE `post_timestamp` BETWEEN (NOW() - 0 AND NOW() - 5)
AND `price` > '0' AND `price` < '10000'
ORDER BY `post_timestamp` desc
问题:虽然有些行的价格列的值介于0到10,000之间,但这并没有给我任何结果。
现在,以下SQL查询返回正确的结果
SELECT `listing_id`, `price` FROM (`listings`)
WHERE `post_timestamp` BETWEEN (NOW() - 0 AND NOW() - 5)
AND `price` < '10000'
ORDER BY `post_timestamp` desc
但是下面的查询不会返回任何结果!!
SELECT `listing_id`, `price` FROM (`listings`)
WHERE `post_timestamp` BETWEEN (NOW() - 0 AND NOW() - 5)
AND `price` > '0'
ORDER BY `post_timestamp` desc
这让我很困惑,不知道是否有人对此有解释/解决方案?
修改以下代码为我提供了结果!
SELECT `listing_id`, `price` FROM (`listings`)
WHERE `price` > '0'
字段类型: int(8)
删除引号 数值周围没有区别
答案 0 :(得分:4)
(我发现自己不明白这个解释是什么),
所以,简而言之
删除括号: -
WHERE `post_timestamp` BETWEEN NOW() - 0 AND NOW() - 5 //first where clause
AND `price` < '10000'
它可能会返回零匹配,
因为比较太短(现在() - 5秒)
检查过去5天
WHERE `post_timestamp` BETWEEN DATE_SUB( NOW(), INTERVAL 5 DAY) AND NOW()
AND `price` < 10000
答案 1 :(得分:1)
我认为你不想引用数值。
答案 2 :(得分:1)
为什么你将price
视为一个字符串?我的意思是,有'0'和'1000'值的引号。尝试删除它们。
修改强>
试试这个并告诉我它是否有效:
SELECT listing_id, price
FROM listings
WHERE post_timestamp BETWEEN (NOW() - 0) AND (NOW() - 5)
AND price < 10000
ORDER BY post_timestamp desc
答案 3 :(得分:0)
在没有看到您的数据库架构的情况下,我无法确定,但您是否尝试过删除数值周围的引号?
答案 4 :(得分:0)
字段价格是否可能为null?