2016-11-30 184 views
1

我的數據庫有月份和日期中沒有前導零的字段。我正在比較今天的日期記錄y-m-d。大於或等於顯示綠燈圖像,否則顯示紅燈。它不工作!幫幫我!CONCAT日期問題

$q = "SELECT * FROM pec_mbbtmssgs WHERE activity='bike' AND CONCAT(`y`,'-','m','-','d') >= date('Y-n-j')"; 
$r = mysql_query($q); 
$row = mysql_fetch_assoc($r); 
$activity = $row['activity']; 

if($activity == "bike") { 
    $image = "greenlight25"; 
} 
else { 
    $image = "redlight25"; 
} 

echo '<img src=http://img/' . $image . '.gif />'; 
?> 
+0

如果我正確理解這個問題:你有'y','m'和'd'單獨的列嗎? – Qirel

+0

此外,請看這裏的引用'CONCAT(\'''',' - ','m',' - ','d')',你使用反引用'y',但是單引號(所以它是間隔爲字符串)爲'm'和'd'。 – Qirel

+0

是的,y,m和d分開的列 –

回答

0

你的CONCAT()使用是有點過了,因爲數據庫列應該無論是在反引號或沒有被包裹在所有,並在singlequotes '串/分離器。

您也可以只做DATE(NOW())以獲取當前日期,並與此進行比較。然後你使用DATE()CONCAT()的結果,所以它變成這樣

SELECT * 
FROM pec_mbbtmssgs 
WHERE activity='bike' 
    AND DATE(CONCAT(y, '-', m, '-', d)) >= DATE(NOW()) 

的簡單的方法是隻存儲在DATE類型列的日期,而不是3分獨立的。您始終可以提取所需的特定信息(例如,即使您的值爲2016-11-30,也可以提取月份)。

+0

Yippee!這樣可行!我的唯一問題是從今天的日期開始,在我的數據庫和DATENow函數中都有2個月份和日期的數字。當月份變爲1月份時,它仍然可以正常工作,或者Date(NOW()返回的值是單個數字月份還是天數的前導零? –

+0

這應該可以工作,可以通過運行'SELECT DATE(' 2016-01-01')= DATE('2016-1-1')',它應該返回true(在MySQL中爲'1') - 因此,如果存在前導零或不存在,只要格式是正確的。高興有幫助,雖然!如果這個答案解決了你的問題,請[接受此答案](http://stackoverflow.com/help/accepted-answer):-) – Qirel

+0

就像我說的,儘管它可能更容易處理1'DATE'列('yyyy-mm-dd')而不是3個獨立的整數列。如果你只需要一個月,你可以'SELECT DATE_FORMAT'('2016-11-30','%M')作爲月份,這會給你'11'。您可以用'DATE'類型列的名稱替換'2016-11-30'。 – Qirel

0
$q = "SELECT * FROM pec_mbbtmssgs WHERE activity='bike' AND unix_timestamp(CONCAT(`y`,'-',`m`,'-',`d`)) >= unix_timestamp(CURDATE())"; 
+0

試過這一個,它沒有工作。我想我正在嘗試做的是與我的米和d字段建立一個字符串,並將其與我相信也被格式化爲字符串的當前日期進行比較。從而比較一個字符串與另一個。 –

+0

我不確定我是否瞭解您的評論,但是您是否使用過CURDATE()?請執行以下SQL。它可能會給你一些想法。比較應該工作。選擇unix_timestamp(CONCAT(2016,' - ',11,' - ',30)),unix_timestamp(CURDATE()) –

+0

就像您發送的那樣插入,但仍然無法正常工作。數據庫中的y,m,d字段只是數字,而不是unixtimstamp。我試圖讓他們以yyy-m-d格式來比較他們到的日期('Y-n-j'),它的格式相同,n和j數字上沒有前導零。試圖將蘋果與蘋果進行比較,但無法正常工作。 –