使用MySQL过滤数字

时间:2011-12-10 17:13:53

标签: php mysql sql database

我正在运行以下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)

删除引号 数值周围没有区别

5 个答案:

答案 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?