2011-05-28 73 views
1

這將使用PHP完成。通過將數據從時間戳轉換爲unix時間獲取數據

我基本上想要得到30分鐘前插入的行數。

我在我的表上有一個時間字段,它是類型TIMESTAMP,並在更新它時設置爲CURRENT_TIMESTAMP。

日期存儲格式爲:

2011-05-27 04:29:17 

我的查詢應該是這個樣子,但我就是不能做

SELECT COUNT(*) FROM mytable WHERE UNIX_TIMESTAMP(time) < '.time().'-1800 

如果時間()是PHP的函數獲取UNIX時間。

它應該基本上做的是打印從現在到30分鐘前插入的行數,但我似乎無法使其工作。

有人可以幫忙嗎?

小編輯: 我看到的另一個問題是,php的函數time()顯示的是UTC的unix時間。存儲在mysql中的時間可能是GMT,即我的計算機的時間/時區設置爲。

+0

我有同樣的問題,dikidera在他的「小編輯」中提到。我正在尋找的是PHP獲取其時間的地方()與MySQL獲取ON UPDATE CURRENT_TIMESTAMP的地方。如果我使用UTC或者不使用,我真的不知道,我只需要它們匹配。 – ftrotter 2011-11-29 23:53:07

回答

1

你可以很容易地通過簡單地使用存儲從現在到30 mins前行:

SELECT count(*) FROM mytable WHERE `time` >= DATE_SUB(UTC_TIMESTAMP, INTERVAL 30 minute) 

UTC_TIMESTAMP用法是,如果你存儲您的日期/時間數據UTC_TIMESTAMP()只是一個例子,你也許可以使用如果有必要的話,取決於你真正存儲的內容。

**編輯** 去掉壞的指針和固定例如:)

+2

@tradyblix:不需要改變'COUNT(*)'。 – 2011-05-28 15:21:53

+0

奇怪的是,當我直接通過PHPMyAdmin運行這個查詢時,我得到了表格中的所有行,這些行是一天前插入的,而不是30分鐘前 – dikidera 2011-05-28 15:22:42

+0

@tradyblix:你說'COUNT() MySQL的。MySQL實際上運行'COUNT(*)'比'COUNT(field)'更快。試試一下有幾百萬行的表。 – 2011-05-28 15:29:46

0
  1. 你真的需要您的計算機的時區比UTC有所不同?爲什麼不把它設置爲UTC &救自己的困惑?如果這不起作用,只需在mysql上使用dateadd()將您的mysql時間戳轉換爲UTC時檢查?

  2. 我的建議是編寫一個小函數來將mysql時間戳轉換爲您的PHP時間戳格式&將它加載到mysql中。然後,只需在查詢中調用tmstamp(time_stamp)而不是time_stamp。你也可以做相反的事情,即將PHP的「30分鐘前」時間戳轉換爲mysql格式並重新運行你的查詢(可能更容易)。

通常這只是一個格式問題。它在各個計劃中都沒有標準化。

+0

要求是將時間存儲在MySQL中的UTC ..並且我對時區非常糟糕..但是你看,我沒有訪問將數據存儲在mysql中的應用程序,所以mysql必須添加它自己的時間戳。 – dikidera 2011-05-28 15:28:17