2013-07-24 56 views
0

我看見有幾個職位對這個問題,但我沒有得到它才能正常工作。我有一個PHP變量,我最初作爲一個字符串發佈。爲了能夠處理一個星期的日期範圍,我使用strToTime將其轉換爲日期時間格式(例如,2013年7月22日回波爲1374476400)。MySQL查詢解釋日期字符串的日期

我的表具有存儲爲Y-M-d格式(例如2013年7月22日被存儲爲2013年7月22日)文本其日期。我需要運行一個查詢,比較這兩個值來查找屬於我的一週範圍內的日期,所以我試圖將該文本轉換爲日期時間格式以進行比較。

這裏是我使用的SQL:

$wk_begin = $_POST['wk_begin']; 
$wk_begin = strToTime($wk_begin); 
$wk_end = $wk_begin + 8; 
$sql = "SELECT * FROM myTable WHERE (DATE(date)>=$wk_begin AND DATE(date)<$wk_end)"; 

我沒有得到任何錯誤,但我的查詢是不是撿任何記錄起來,儘管我知道,有7個匹配的記錄桌子。所以,我有兩個問題:

1)是否有更好的方式去這件事嗎? 2)如果我在正確的軌道上,我怎麼能得到sql語句基於文本日期轉換成一個大的整數,這樣我可以做正確的比較。

任何幫助表示讚賞。謝謝!

編輯:感謝所有的建議。我更改了表格,以便日期以'日期'格式存儲(不再有字符串)。這是更新的代碼。還沒拿起任何值:

$wk_begin = $_POST['wk_date']; 
$wk_end = $wk_begin + 7; 
$sql = "SELECT * FROM Workouts WHERE 'date' BETWEEN '$wk_begin' AND '$wk_end'"; 
+1

*「我的表格的日期存儲爲文本」*多數民衆贊成在問題 – 2013-07-24 20:28:44

+0

爲什麼不把日期作爲日期!?在數據庫中。然後使用BETWEEN date1和date2。 – bestprogrammerintheworld

+0

我試過了。它仍然不起作用。 – Alex

回答

0
<?php 
$wkbegin = $_POST['wk_begin']; 
$wk_begin = strToTime($wkbegin); 
$d=date('j', $wk_begin)+8; 
$m=date('n', $wk_begin); 
$y=date('Y', $wk_begin); 
$wk_end = date('Y-m-d', mktime(0,0,0, $m, $d, $y)); 
$wkbegin = date('Y-m-d', $wk_begin); 
$sql = "SELECT * FROM `myTable` WHERE `date`>='".$wkbegin."' AND `date`<'".$wk_end."'"; 
?> 
+0

謝謝。但是,我認爲這不會處理$ wk_begin在月底8天內發生的常見事件。它確實有 – Alex

+0

。 7個字符更多地說...即時通訊確實很確定它會與它鍛鍊。到過那裏。做到了。 –

+0

你說得對。有用。謝謝! – Alex

2

date是MySQL中的保留字,把它作爲一個字段名稱環繞它反引號。

而且您的變量插入需要撇號

SELECT * FROM myTable WHERE (DATE(`date`)>='$wk_begin' AND DATE(`date`)<'$wk_end' 

更好的解決方案(除了賺取的日期字段date場)要圍繞將使用DB庫的逃逸和建設時引用機制sql語句。

此外,由於你是存儲您的日期Y-M-D格式投至日期是不必要的,因爲在格式化這樣的日期字符串比較評估相同的字符串。所以

$sql = "SELECT * from myTable WHERE `date` >= ".$db->quoteAndEscape($wk_begin)." and `date` < ".$db->quoteAndEscape($wk_end); 

UPDATE

基礎上可以作爲一個不帶引號的字段名稱this日期。

+0

謝謝。這似乎並沒有解決問題。 – Alex