2014-01-22 111 views
1

只需要一點幫助,我希望你能幫我解決我的簡單問題。如何使用Mysql時間戳創建日期範圍查詢?

我有一張由商店數據組成的表格。在我的PHP頁面中,用戶可以註冊他們的商店。 註冊後,用戶註冊其賬戶的日子將保存在數據庫表中,並將格式化爲TIMESTAMP

我沒有問題。在我的後端頁面中有一個預先搜索方法的表單。在我的形式,有一個下拉字段和它旁邊有一個日期選擇器將作爲毫米/日/年格式化所以我有2日期選擇器對於這從

我的問題是:

我用在PHP中的strtotime()函數格式化日期選擇的結果。我有這樣的查詢。查詢

$query = "SELECT * FROM shops 
      WHERE status = '".$status."' 
      AND registered BETWEEN ('".$from." AND ".$to."')"; 

示例輸出:

SELECT * FROM shops WHERE status = 'P' AND registered BETWEEN ('1388505600' AND '1391097600'); 

現在我有一個從$ $和一個時間戳的結果。我如何在mysql中過濾它?

好的就是這樣。提前致謝。

回答

1

如果列registered已不在UNIX時間內,則需要刪除時間戳周圍的引號,並且需要使用FROM_UNIXTIME()。

+0

對不起我的錯。謝謝你提醒我。 – Jerielle

+0

這完全沒有幫助,因爲仍然需要在unix時間戳和MySQL日期時間格式之間進行轉換。 –

+0

是的,我沒有意識到這一點。 –

1

我認爲你需要使用FROM_UNIXTIME

$query = "SELECT * FROM shops WHERE status = '".$status."' AND registered BETWEEN FROM_UNIXTIME(".$from.") AND FROM_UNIXTIME(".$to.")"; 
+0

好吧,我會嘗試。謝謝。 – Jerielle

3

你確實應該在PHP格式化適當YYYY-MM-DD字符串格式。

基本上很少有人有理由在MySQL中使用UNIX時間戳。

所以做這樣的事情對於每個日期選擇的往/返值:

$to_datetime = DateTime::createFromFormat('m/d/Y|', $datepicker_to); 
$to = $to_datetime->format('Y-m-d'); 
$from_datetime = DateTime::createFromFormat('m/d/Y|', $datepicker_from); 
$from = $from_datetime->format('Y-m-d'); 

,然後在查詢中使用它們:

$query = "SELECT * FROM shops 
      WHERE status = '".$status."' 
      AND registered BETWEEN ('".$from."' AND '".$to."')"; 

請注意,我已經使用PHP DateTime類,我會強烈推薦你去PHP日期處理工具(以及它的相關類如DateInterval,DatePeriod,DateTimeZone等)

+0

謝謝邁克先生提供非常豐富的答案。我現在就試試看,併爲我的推薦研究這些代碼。謝謝。 – Jerielle

+0

先生我得到了一個錯誤 '致命的錯誤:調用一個非對象的成員函數格式()在' – Jerielle

+0

@Jerielle似乎創建DateTime對象不起作用(儘管這應該引發一個異常)。你能告訴我你爲'$ datepicker_to'或'$ datepicker_from'(無論哪一個出錯)傳遞了什麼值?你有錯字嗎? –

1

PHP

// $t is the value you got from strtotime() 
$FormattedDateTime = date('Y-m-d H:i:s', $t) 
+1

爲了兼容MySQL,你實際上需要'Y-m-d H:i:s'。 –

+0

我已經修復了謝謝@Mike Brant。 – Mehdi