2011-12-27 80 views
4

的MySQL不會減少我等於0時

UPDATE topic SET liked = liked - 1 WHERE id='$id' 

liked0它不會遞減。

liked0時,我爲了減小字段liked而需要做什麼?

注:它的工作原理,當它不爲0

編輯:liked爲int。

+5

can'like' be negative?它的數據類型是什麼? – 2011-12-27 14:29:30

+8

確保'喜歡'不是無符號的。 – 2011-12-27 14:29:46

+0

哪個數據類型被「喜歡」定義爲? – Aaron 2011-12-27 14:30:08

回答

2

需要將liked列設置爲SIGNED。

例如。

ALTER TABLE `tbl` CHANGE `liked` `liked` INT(10) SIGNED 
+0

據我可以看到,從Navicat它已經簽署。無論如何,我已經成功運行了代碼,但沒有任何效果。它只在整數不爲0的情況下有效。 – ilhan 2011-12-27 14:46:46

4

你想要樓層爲零嗎?

UPDATE topic SET liked = liked - 1 WHERE id='$id' AND liked > 0; 

如果你想負數,你當然需要的SIGNED datatype。但是,您需要了解限制以避免錯誤。見"Out-of-Range and Overflow Handling"

因此,假如喜歡改爲SIGNED TINYINT ...

UPDATE topic SET liked = liked - 1 WHERE id='$id' AND liked > -128; 
1

如果使用UNSIGNED整數它不能低於0,但如果我有ü正確的 - 你可以當它是低於0值下降?如果是這樣,你有沒有嘗試引用值?也許這就是MySQL等於0到NULL的問題?嘗試像這樣:

`liked` = (`liked` - 1) 
+0

如果它不是0,則它爲-1。例如,如果我有5,則它變成-1。當沒有撇號時,它對任何數字都沒有影響。 – ilhan 2011-12-27 14:55:30

+0

好吧,我已經檢查了一切,當它是SIGNED INT時它工作正常,這是測試代碼:UPDATE'test' SET liked = liked - 1 WHERE 1,如果你把第二個喜歡的引號用這樣的:'liked' - then你會得到錯誤的結果 – 2011-12-27 17:10:53