2013-10-29 107 views
0

我有一個表中的記錄存儲使用php的strtotime函數。我需要和沒有任何經驗的是在兩週內查詢數據庫中的所有記錄從使用mysql的時間戳之前2周選擇記錄

對不起,我沒有代碼顯示,因爲使用時間戳對我來說都是如此新鮮。

+0

您在數據庫中有數字時間戳。你知道如何生成「2周前」的時間戳嗎?如果是這樣,你就會在查詢中比較整數。 – Madbreaks

+0

@Madbreaks我不知道如何處理時間戳,所以答案是否定的,我不知道如何做到這一點 – jkushner

+0

+1不明原因的反對票 – bishop

回答

2

如果您的日期存儲爲一個時間戳,這是很容易採取兩個星期吧:

select 
    * 
from 
    yourTable 
where 
    dateField<=UNIX_TIMESTAMP() 
    and dateField>=(SELECT UNIX_TIMESTAMP()- 60*60*24*14) 

由於這些都是在幾秒鐘內,只需減去60秒×60分鐘×24小時X14天你有你所需的條件。

僅供參考:時間戳僅僅是自從unix epoch以來經過的秒數,因此加法或減法非常簡單。如果你想要一個特定的日期,你也可以使用PHP的mktime生成一個時間戳。

+0

一遍又一遍地計算秒是例如MySQL不會進行優化,每次執行查詢時都需要計算它。 bishop的答案因此更好,因爲它可以通過DBMS輕鬆優化。這個評論可能在將來或任何其他數據庫管理系統中都不是這樣的! – Fleshgrinder

+0

@Fleshgrinder是的,但是在幾秒鐘內解釋它(即,一個時間戳是什麼)從長遠來看可能比僅僅教導某人使用時間與mysql'now()'功能相比更有益 - 有點難以使用,如果你想指定一個特定的兩週差距:) – Fluffeh

+0

絕對正確,但你可以簡單地在你的查詢中包含'1209600',因爲你的詳細和完美的解釋直接遵循。 Upvoted你的。 ;)哦,'CURRENT_TIMESTAMP'是一個魔術常量,理論上比'UNIX_TIMESTAMP()'更快;但請注意,我從來沒有爲它做過任何基準測試(根據許多其他編程知識的簡單假設)。 – Fleshgrinder

5

從內存:

SELECT * FROM Foo WHERE bar BETWEEN (NOW() - INTERVAL 2 WEEK) AND NOW() 

與任何東西是時間戳相關的()現在更換。我目前正在與我的平板電腦搏鬥,所以我無法檢查這是否完全正確。祝你好運。

+0

你忘記了我想的date_sub()函數。 –