2017-10-13 1 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> 

이 쿼리를 실행하면 배열 (0) {}이 반환됩니다. 누가 내가 틀렸는 지 알아 내도록 도와주세요.

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


SELECT * FROM items WHERE expiry_date>$futureDate 
+0

봅니다 ISO-8601 날짜를 사용 : 'YYYY-MM-DD'을. 오늘 날짜가 없습니다. – tadman

+0

여기서 날짜를 사용할 수 없습니다 – Arsh

+1

날짜가 아닌 경우'만료 날짜 '는 무엇입니까? – tadman

답변

0

VARCHAR를 DATE로 변환해야합니다.

만료 _ 날짜 일 "Y m 01"이 필요합니다. MySQL에서는 CONCAT을 사용하기 때문에 "01"str_to_date requiere day.

$ futureDate 일은 PHP 또는 MySQL의 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 열은 항목 FROM, VARCHAR 조회에서 의미

SELECT *를 저장하는 WHERE EXPIRY_DATE> $ futureDate 당신이 만들려고하는

을 $ futureDate를 DATE로 정의 했으므로 VARCHAR 값과 DATE 값의 날짜 비교는

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

이는 작동하지 않습니다. 둘 다 DATE 형식의 값이어야합니다. 비교를 위해 VARCHAR을 DATE로 변환해야합니다. 예를 들어

:

$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 
관련 문제