2016-11-30 11 views
1

私のデータベースには、月と日に先行ゼロがないフィールドがあります。今日の日付とy-m-dのレコードを比較しようとしています。それ以上の場合は緑色の画像、それ以外の場合は赤色の画像を表示します。動いていない!助けて!CONCAT date issue

$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(\' y \ '、 ' - '、 'm'、 ' - '、 'd')'を引用すると、 'y'のバックティックを使っていますが、一重引用符'm'と' d'の文字列として解釈されます)。 – Qirel

+0

はい、y、m、dの別々の列 –

答えて

0

データベース・カラムはどちらかすべきではすべてのバッククォート・オア・ナッシングで包まれ、そしてsinglequotes '内の文字列/セパレータとしてCONCAT()のご利用状況は、少しオフになっています。

また、DATE(NOW())を実行して現在の日付を取得し、これと比較することもできます。その後、だけではなく、3つの別々のもので、DATEタイプの列にあなたの日付を格納するだろうあなたのCONCAT()の結果とDATE()を使用するので、この

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

単純なアプローチのようになります。必要な情報をいつでも抽出することができます(たとえば、値が2016-11-30であっても月を抽出することができます)。

+0

イッピー!それは動作します!私の唯一の質問は、今日のデータベースの日付とDATENow関数の両方が月と日の2つの数字を持つためです。月が1月に変わってもOKか、日付(NOW()は1桁の月数または日数の先頭に0をつけた値を返しますか?) –

+0

これはうまくいくはずです。SELECT DATE 2016-01-01 ')= DATE(' 2016-1-1 ') '、これは真(MySQLでは' 1')を返すべきです - 先行ゼロがあるかどうかは関係ありません。この形式で問題が解決した場合は、[この回答を受け入れる](0120)を参考にしてください: – Qirel

+0

私が言ったように、それはおそらく3つの別々の整数列ではなく、1つの 'DATE'列(' yyyy-mm-dd')を扱いやすくなりました。月だけが必要な場合は 'SELECT DATE_FORMAT( '2016-11-30'、 '%M')を月にすることができます。これは' 11'を与えます。 '2016-11-30'を' DATE'型の列に置き換えることができます。 – Qirel

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

これを試しても機能しませんでした。私がやろうとしているのは、y mと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の数字に先行ゼロがない同じ形式です。リンゴとリンゴを比較しようとしているが動作していない。 –