2012-09-26 186 views
0

我有這個代碼,它允許我檢索所有信息的時間戳有關該信息等於另一個日期。比較時間戳和日期在php

下面是代碼:

$information="SELECT * FROM scheda_anagrafica WHERE FROM_UNIXTIME('time_inserted','%d-%m-%Y') = '" . $giorno_selcted. "' 
"; 
$result1 = mysql_query($information) or die (mysql_error()); 
while($row = mysql_fetch_array($result1)) { 

    echo $row['information1']; 

} 

giorno_selected印像:25-09-2012 什麼我錯在這裏做什麼? 謝謝!

+0

你好,請你解釋一下多一點? – nana

+0

$ giorno_selcted – RomanKonz

+0

的內容是肯定的,所以我在數據庫中有一個字段,它是一個timstamp,當前日期即;讓我們假設時間戳給我23-09-2012 12:23:45和日期變量給我23-09-2012,我需要檢查時間戳和日期是否相等,但我需要在查詢中這樣做。 – Tao

回答

0

首先,你不應該在where子句中的操作符左側使用mysql函數。這樣mysql需要讀取磁盤上的完整表來計算要比較的值,而不是優化查詢速度和資源使用情況(IO,cpu)。

從你的問題和意見我明白,你正在查詢數據庫的行與$giorno_selected代表的字符串有同一天。所以你需要找到特定日0:00到23:59之間,時間戳的所有行:

$giorno_timestamp_start = date_create_from_format('d-m-Y', $giorno_selected)->getTimestamp(); 
$giorno_timestamp_end = $giorno_timestamp_start + 86399; //add almost all seconds per day onto the start timestamp 

$information="SELECT * FROM scheda_anagrafica WHERE time_inserted BETWEEN " . $giorno_timestamp_start. " AND ". $giorno_timestamp_end; 
$result1 = mysql_query($information) or die (mysql_error()); 
while($row = mysql_fetch_array($result1)) { 

    echo $row['information1']; 

} 

這個作品,如果你time_insertedinteger型和持有unix_timestampds。 如果是datetime型或timestamp您需要修改本查詢:

$information="SELECT * FROM scheda_anagrafica WHERE time_inserted BETWEEN FROM_UNIXTIME(" . $giorno_timestamp_start. ") AND FROM_UNIXTIME(". $giorno_timestamp_end .")"; 
+0

嘿,謝謝,以及我不明白這一點,你能告訴我,我怎樣才能將時間戳轉換成使用d-m-Y的日期函數?所以我可以立即在查詢中比較它們? 我使用日期函數做了它,但它給了我一個奇怪的日期,比如1970-01-01 – Tao

+0

爲了比較你需要的東西,確保它是相同類型的。否則,你會比較蘋果與橙子。因此,爲了比較一個像'23-09-2012'這樣的字符串與數據庫中的整數像'1348674213',您需要將該字符串轉換爲一個表示相同值的整數。這就是'date_create_from_format()'函數所做的。 –

+0

是的,但問題是,我需要從查詢進行比較,我的意思是我需要使用類似這樣的東西:WHERE date('dm -Y',strtotime('time_inserted')='26- 09-2012'where time_inserted is the field ... – Tao