2017-10-13 20 views
0

製品の有効期限の3ヶ月前に通知を受けようとしています。 expiry_dateカラムはDBにVARCHAR(月と年を格納)として格納しています。有効期限までに通知を受け取ります

<select name="month"> 
    <?php 
    $months = array (

1=>'Jan',2=>'Feb',3=>'Mar',4=>'Apr',5=>'May',6=>'Jun',7=>'Jul',8=>'Aug',9=>'Sep',10=>'Oct',11=>'Nov',12=>'Dec'); 
    ?> 
    <option value="">Select Month</option> 
    <?php 
    foreach ($months as $key=>$value) { 
    echo '<option name="'. $key .'">'. $value .'</option>'; 
    } 
    ?> 
</select> 

<select name="year"> 
<?php 
$Start_year=date('Y'); 
$end_Year=$Start_year+10; 
$yearArray = range($Start_year,$end_Year); 
?> 
<option value="">Select Year</option> 
<?php 
foreach ($yearArray as $key=>$value) { 
echo '<option name="'. $key .'">'. $value .'</option>'; 
} 
?> 
</select> 

このクエリを実行すると、array(0){}が返されます。誰かが私が間違っている場所を見つけるのを助けてください。

$futureDate = date('Y M', strtotime("+3 months")); 


SELECT * FROM items WHERE expiry_date>$futureDate 
+0

はISO-8601の日付を使用してみてください。これには日番号がありません。 – tadman

+0

ここで日付を使用することはできません – Arsh

+1

日付でない場合は、 'expiry_date'とは何ですか? – tadman

答えて

0

あなたはVARCHARをDATEに変換する必要があります。

expiry_date日 "Y m 01"が必要です。 MySQLではCONCAT "01"を使用しています。str_to_date requiere day。

$ futureDate MySQLのPHPまたはCONCATで追加日が必要です。 このクエリは正常に動作します。 https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_str-to-date

https://www.w3schools.com/sql/func_mysql_date_format.asp私のデータベースで

SELECT * 
FROM `test` 
WHERE date_format(str_to_date(CONCAT(expiry_date, ' 01'), '%Y %m %d'), '%Y %m') > date_format(str_to_date('$futureDate', '%Y %m %d'), '%Y %m') 

、テーブルテストは2列、投稿にIDEXPIRY_DATE VARCHAR例えば "2017 01"

0

を持っていますたとえば

あなたが作るしようとしているEXPIRY_DATE> $ futureDate

項目FROM

列がクエリで、意味VARCHAR

として保存されEXPIRY_DATE、

SELECT * $ futureDateをDATEと定義しているため、VARCHAR値とDATE値の日付比較は

$ futureDate =日付( 'Y M'、strtotime( "+ 3 months"));

これは動作しません。どちらもDATE形式の値でなければなりません。比較のためにVARCHARをDATEに変換する必要があります。例えば

: `YYYY-MM-DD`:

$expiry_as_date = $year . '-' . $month . '-01'; 
$new_expiry_date = date('Y-m-d', strtotime($expiry_as_date)); 

SELECT * FROM items WHERE $new_expiry_date>$futureDate 
関連する問題