我想在兩個事件之間獲取數據庫中的時間差秒數。在數據庫上,users表具有不同的列,但我正在處理狀態列。如果用戶在我們的網站上下了一個訂單,狀態欄會顯示「正在等待」,如果我們的代理確認,它會切換到「成功」。我試圖在顯示掛起和顯示成功時獲得時間差(以秒爲單位)。如何獲得兩個數據庫列狀態(或事件)之間的時間差(以秒爲單位)
注意:如果有人能夠用PHP例子解釋time()函數,我會很高興。
我想在兩個事件之間獲取數據庫中的時間差秒數。在數據庫上,users表具有不同的列,但我正在處理狀態列。如果用戶在我們的網站上下了一個訂單,狀態欄會顯示「正在等待」,如果我們的代理確認,它會切換到「成功」。我試圖在顯示掛起和顯示成功時獲得時間差(以秒爲單位)。如何獲得兩個數據庫列狀態(或事件)之間的時間差(以秒爲單位)
注意:如果有人能夠用PHP例子解釋time()函數,我會很高興。
您可以使用MySQL的unix_timestamp()
函數。假設你的表有兩個記錄,並且有一個名爲eventTime
的列,那麼像下面這樣的兩個查詢可以給你兩個值,它們是從Epoch開始的相應秒數。您可以通過前者減去後者,並獲得時間差
select unix_timestamp(eventTime) ... where status='pending'
select unix_timestamp(eventTime) ... where status='success'
更新
重新閱讀您的問題後,我想你的數據庫的設計是,有整個人生只有一行交易週期(從pending
到success
)。在這種情況下,如果所涉及的所有三方(將狀態更新爲pending
的代理,將狀態更新爲success
的代理以及需要查找兩個事件之間的時間差的代理)都是相同的線程,那麼您可以將兩個事件時間保留在內存中,並簡單地計算差異。
但是,我認爲三方更有可能是兩三個不同的線程。在這種情況下,我認爲你必須有一些機制將知識(第一個事件時間)從一個線程傳遞到另一個線程。這可以通過添加一個名爲lastUpdateTime
的新列或通過添加一個用於時間跟蹤目的的新表來完成。順便說一下,如果您使用第二種方法,我認爲MySQL Trigger可能對您有用(所以無論何時表更新時,它都會觸發另一個命令來更新第二個表,該表僅用於跟蹤事件經過時間的時間)。這種方法允許你不改變原始表格,而只是添加一個新表格。
非常感謝。但我有兩個問題。首先,你不覺得簡單的if和else語句可以幫助獲得兩條記錄之間的時間嗎? [請注意,事件將在一列中更新(即,對於用戶,它將在單元格中更新,從「等待」更改爲「成功」)]]。 – Joeanne
其次,您談到了在同一張表上添加新列以顯示lastupdate時間。我如何實現這一點?觸發器ish看起來很複雜。謝謝 – Joeanne
時差是t2-t1。如果更新程序是相同的編程線程,則可以對其進行編碼,以便在第一次更新之前記住t1(例如,在內存中)。如果不是,那麼關於t1的信息必須從第一個更新程序傳遞到第二個更新程序,然後他們可以計算差異。 – leeyuiwah
該手冊有'time()'示例,http://php.net/manual/en/function.time.php。你有什麼特別的問題嗎?所以你正在尋找記錄更新所需的時間? – chris85
是的克里斯。更新記錄所花費的時間。提前致謝! – Joeanne
我不認爲你可以用DB做到這一點。您可以在PHP端更新前後存儲'microtime'。 – chris85