2013-08-19 25 views
0

所以基本上我試圖讓我的銷售頁面上的自動失效,我有這個SQL;這個SQL似乎刪除所有行的字段大於0

DELETE 
FROM `game_sales` 
WHERE `expires` <= NOW() 
    AND `expires` > 0 

這似乎刪除所有行expires > 0不管expires比當前時間下的。

我該如何解決這個問題?

+1

上面的查詢不是從您的數據庫中刪除任何東西。看看你的數據庫日誌,看看被調用的實際刪除子句 –

+0

Ooops我複製了錯誤的,正確的 – NaughtySquid

+3

'expires'的數據類型是什麼? – gvee

回答

4

你根本無法比較INTDATETIME(這是什麼NOW()返回)。

如果您expires實際上是一個時間戳,您可以:

  • 時間戳轉換爲DATETIMEFROM_UNIXTIME()WHERE FROM_UNIXTIME(expires) <= NOW()

  • 轉換的DATETIME整數:WHERE expires <= UNIX_TIMESTAMP(NOW())

第二個選項是cer必須首選。使用此版本,大多數查詢應該能夠使用expires上的索引(而第一個版本肯定阻止在此列上使用索引)。

+0

是的,就是這樣,我甚至沒有意識到NOW()是一個適當的時間格式,認爲它是一個時間戳,那是我的問題。 – NaughtySquid

0

您的SQL查詢只選擇數據,它不會刪除它。 WHERE條件返回符合BOTH條件的數據,所以我會查找NOW()語句的有效期<。

expires < NOW()使所有條目,其中EXPIREDATE是正確的之前,現在

expires > 0給你所有到期比0

編輯較大值: 有了你已經得到了問題的INT時間。 NOW()返回datetime數據類型的值。 與int相比,它應該比較你的時間的毫秒值。

您是否以毫秒爲單位存儲時間?

+0

查詢已更新,請參閱評論。 – NaughtySquid

+0

作爲海報聲明該列是INT – DrCopyPaste

+0

更新我的答案。 – Bruellhusten