2011-12-10 28 views
2

我正在运行以下MySQL查询来筛选价格在一定范围内的列表数量。使用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)

去掉引号 各地的数值不有所作为

+2

什么是'price'的字段类型? –

+0

字段类型是int(7) – Nyxynyx

回答

4

(我发现自己不明白这是什么解释),
等等,总之

删除括号以: -

WHERE `post_timestamp` BETWEEN NOW() - 0 AND NOW() - 5 //first where clause 
AND `price` < '10000' 

它可能返回零个匹配,
作为比较太短(NOW() - 5秒)

要查看最近5天

WHERE `post_timestamp` BETWEEN DATE_SUB(NOW(), INTERVAL 5 DAY) AND NOW() 
AND `price` < 10000 
+0

+1我刚刚在发布时输入了这个信息。 –

+0

谢谢,我♡+1 – ajreal

+0

是的,该手册说“BETWEEN最小和最大”简单扩展到“(最小<=表达式和表达式<=最大)” –

0

没有看到你的数据库架构,我不能肯定,但你有没有尝试从数值附近删除引号?

+0

我试图删除引号和结果是一样的 – Nyxynyx

+0

这应该不是问题:mySQL会自动将引用值转换为所需的目标列值 - 在本例中为int。 http://dev.mysql.com/doc/refman/5.0/en/type-conversion。html –

0

该字段价格有可能是空值?

+0

我做了'SELECT listing_id,price FROM(listing) WHERE price = NULL'并且没有返回结果 – Nyxynyx

1

我不认为你想引用数值。

+0

我删除了数字上的引号并且它的结果仍然相同 – Nyxynyx

+0

这应该不是问题:mySQL会自动将引用的值转换为所需的目标列值 - 在本例中为“int”。 http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html –

+0

然后我的第二个猜测;-),是BETWEEN(XXX)之后的括号将解析器混淆为思考XXX是一回事,而下面的价格条款仍然是“之间”的一部分。 () - 5或BETWEEN(NOW() - 0)和(NOW() - 5) –

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 
+0

在字段类型是int(8),我删除了引号,但仍得到相同的结果 – Nyxynyx

+0

这应该不是问题:mySQL会自动将引用值转换为所需的目标列值 - 在本例中,“int” 。 http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html –