所以基本上我試圖讓我的銷售頁面上的自動失效,我有這個SQL;這個SQL似乎刪除所有行的字段大於0
DELETE
FROM `game_sales`
WHERE `expires` <= NOW()
AND `expires` > 0
這似乎刪除所有行expires > 0
不管expires
比當前時間下的。
我該如何解決這個問題?
所以基本上我試圖讓我的銷售頁面上的自動失效,我有這個SQL;這個SQL似乎刪除所有行的字段大於0
DELETE
FROM `game_sales`
WHERE `expires` <= NOW()
AND `expires` > 0
這似乎刪除所有行expires > 0
不管expires
比當前時間下的。
我該如何解決這個問題?
你根本無法比較INT
與DATETIME
(這是什麼NOW()
返回)。
如果您expires
實際上是一個時間戳,您可以:
時間戳轉換爲DATETIME
與FROM_UNIXTIME()
:WHERE FROM_UNIXTIME(expires) <= NOW()
轉換的DATETIME
整數:WHERE expires <= UNIX_TIMESTAMP(NOW())
第二個選項是cer必須首選。使用此版本,大多數查詢應該能夠使用expires
上的索引(而第一個版本肯定阻止在此列上使用索引)。
是的,就是這樣,我甚至沒有意識到NOW()是一個適當的時間格式,認爲它是一個時間戳,那是我的問題。 – NaughtySquid
您的SQL查詢只選擇數據,它不會刪除它。 WHERE條件返回符合BOTH條件的數據,所以我會查找NOW()語句的有效期<。
expires < NOW()
使所有條目,其中EXPIREDATE是正確的之前,現在
和
expires > 0
給你所有到期比0
編輯較大值: 有了你已經得到了問題的INT時間。 NOW()
返回datetime
數據類型的值。 與int相比,它應該比較你的時間的毫秒值。
您是否以毫秒爲單位存儲時間?
上面的查詢不是從您的數據庫中刪除任何東西。看看你的數據庫日誌,看看被調用的實際刪除子句 –
Ooops我複製了錯誤的,正確的 – NaughtySquid
'expires'的數據類型是什麼? – gvee