2014-01-31 60 views
3

我想添加一個時間戳字段(添加)到用戶(在這種情況下userstest)表,並需要它大致爲現有用戶。現有用戶的日期並不重要,但順序很重要。如何將時間戳更新爲當前時間,減去id字段(秒)?

我曾嘗試以下:

UPDATE userstest SET added = TIMESTAMP(NOW() - id); 

然而,許多結果都只是自己設定爲「二零一四年一月三十零日19時03分31秒」(全部相同的值),這不應該是因爲id是唯一的,所以時間也應該是唯一的。

我有2,725條記錄,如果它有任何區別。

我在這裏錯過了什麼導致這個工作不正如我所料?

答:得益於3非常有幫助的人在評論

UPDATE userstest SET added = NOW() - interval id SECOND 

好吧,看來這是做正確的方式,但是我原來數學也有一個邏輯的問題爲好,它應該是:

UPDATE userstest SET added = NOW() - interval (3523902 - id) SECOND 

否則順序顛倒。 3523902是所有記錄的最高ID。

+0

定義時間間隔:'UPDATE userstest SET added = NOW() - interval id seconds' –

+0

使用間隔而不僅僅是減法。 ^擊敗我。 – nathancahill

+1

SET added = TIMESTAMP(NOW() - id)'??對於第一個人(id = 1),'added = TIMESTAMP(now() - 1)'和最新的人(例如id = 1000),'added = TIMESTAMP(now - 1000)' - 先前的日期給每個新的人!我不得不說這個 - 邏輯完全錯誤! – Rachcha

回答

0

感謝3位非常有幫助的人在原始問題的評論中。

UPDATE userstest SET added = NOW() - interval id SECOND 

好吧,看來這是做正確的方式,但是我原來數學也有一個邏輯問題,以及,它應該是:

UPDATE userstest SET added = NOW() - interval (3523902 - id) SECOND 

否則順序是相反的。 3523902是所有記錄的最高ID,因此最新記錄的日期將設置爲SQL查詢運行的時間,並且每個先前記錄將從該時間起倒數。

0

我的貢獻:

一種快速的方法來做到這一點(如果你不真的關心abaut什麼時候了,你只whant順序)使用from_unixtime

UPDATE userstest SET added = from_unixtime(id) 

UPDATE userstest SET added = from_unixtime(3523902 - id) #reversed order 

從問題:

回答:感謝評論中3位非常有幫助的人

UPDATE userstest SET added = NOW() - interval id SECOND 

好吧,看來這是做正確的方式,但是我原來數學也有一個邏輯問題,以及,它應該是:

UPDATE userstest SET added = NOW() - interval (3523902 - id) SECOND 

否則順序是相反的。 3523902是所有記錄的最高ID。

相關問題