2011-12-10 29 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 –