2016-11-30 97 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数字上没有前导零。试图将苹果与苹果进行比较,但无法正常工作。 –