2014-01-08 46 views
3

我想優化我在SQL/PHP站點中使用日期的方式。我熟悉date()strtotime()函數,並創建了在unix和datetime中都在服務器端存儲數據的項目。我知道更改日期並不會佔用大量資源,但我正在嘗試以最有效的方式瞭解如何編寫代碼。在sql中存儲日期的最佳格式

我現在想要解決的是什麼最快/最有效的做法是將日期存儲在服務器上,即:什麼是SQL FROM_UNIXTIME,CONVERT,UNIX_TIMESTAMP和PHP strtotimedate函數的最有效組合對於包含日期字段的頻繁CRUD的典型表格。以下例子:

我有一個SQL表,其中包含3個日期列。所有這3可以通過該網站的多個用戶相當定期更新,條目也進入到它,如下所示:

mysql_query("INSERT INTO `regular` (
`regularid`, 
`propertyid`, 
`userid`, 
`billdate`, 
`billfrequency`, 
`enddate`, 
`amount`, 
`description`, 
`payee`, 
`payer`, 
`lastpayment` 
) 
VALUES (
'', '{$_POST['propertyid']}', '$varuserid', FROM_UNIXTIME($date), '{$_POST['billfrequency']}', 'FROM_UNIXTIME($edate)', '$amount', '{$_POST['description']}', '{$_POST['payee']}', '{$_POST['payer']}', 'FROM_UNIXTIME($ldate)' 
)") or die(mysql_error); 

Print "A regular payment for &pound;".$_POST['amount']." has been created<br/>\n"; 

進入到我解析從用戶輸入表單的日期字段到數據庫以mm/dd/yyyy格式表示的變量,使用strtotime()或mktime()函數對其進行驗證,然後使用from_unixtime進行提交。

然而,從數據庫然後顯示信息使用:

date("d-m-Y", strtotime($val['billdate'])) 

這意味着予取來自所述用戶的日/月/年的日期格式並從數據庫中的另一個。然後我使用strtotime將它們轉換爲unixtime,然後使用日期將它轉換回英式日期格式 - 這肯定會翻倍?如果不是三倍?服務器查詢。

我的問題分2部分。 首先,它是最快的a)以unixtime在sql中存儲所有日期格式,並通過服務器端查詢轉換爲日期格式,或b)以日期格式存儲所有日期格式並僅在訪問它們時轉換爲unixtime

(I我認爲後者會是最好的,但我上面的例子表明,即使這樣做,我似乎正在使用更多的服務器時間比我應該)

其次,你能指出我如何執行我的正確方向自己的時間基準腳本 - 我只是真正開始理解測試,因爲我對Php還是比較陌生的,但我很想學習。

非常感謝!

+2

你混淆,其表示該數據被轉換成可讀的完整的日期內第二。在你將它們分開之後 - 你將不會有這樣的問題 – zerkms

+1

好的問題在這裏。您必須考慮到MySQL的'日期'功能及其日期存儲格式已經針對高性能進行了優化。您最好以日期格式存儲日期,並且只有在訪問它們時才轉換爲'unixtime',因爲Unix時間格式最適合OS級操作,而不適用於數據庫存儲。 – Rachcha

回答

3

使用MySQL的「UNIX_TIMESTAMP()」,因爲它很短,並且可以使用PHP,慶典等

+0

就像在使用unix_timstamp()從服務器檢索並以日期格式而不是以unix格式存儲數據一樣?這是否意味着unix_timstamp()明顯比strtotime更快?無論哪種方式,這仍然需要我從dd/mm/yyyy用戶輸入轉換爲unix格式才能進入數據庫,並且從unix再次轉換爲日期時間,當檢索它時....在更新時需要做兩次(無論是數據檢索和條目),如果更新3個日期字段,這意味着6批次的重複... – Simeon

相關問題