[英]Php MySql birthday query between dates ignoring year
我正试图从数据库中获得即将到来的生日,这样我就可以为这些客户创建一个邮件列表。 $ pet_bdate - 管理员以dateFormat格式提供JQuery datepicker的日期:'yy-mm-dd'。 $ plus_days - 他还可以选择日期范围 - 从选定日期0到14的加号天数。
服务器配置:Php v 5.2.17 MySQL v 5.5.23(因此几个更高级的Php功能不能像MySql一样工作)
列petbday是DATE类型。
这是查询:
SELECT * FROM `customer` c LEFT JOIN `pet` p ON (c.customer_id = p.customer_id)
WHERE (DATE_FORMAT(p.petbday, '%m-%d')
BETWEEN DATE_FORMAT(2014-04-13, '%m-%d') AND DATE_FORMAT(DATE_ADD(2014-04-13, INTERVAL 7 DAY), '%m-%d'))
GROUP BY c.customer_id ORDER BY firstname, lastname, email
以下是Php代码:
SELECT * FROM `" . DB_PREFIX . "customer` c LEFT JOIN `" . DB_PREFIX . "pet` p ON (c.customer_id = p.customer_id)
WHERE (DATE_FORMAT(p.petbday, '%m-%d') BETWEEN DATE_FORMAT(" . $pet_bdate . ", '%m-%d') AND DATE_FORMAT(DATE_ADD(" . $pet_bdate . ", INTERVAL " . $plus_days . " DAY), '%m-%d')) GROUP BY c.customer_id ORDER BY firstname, lastname, email
此查询返回ZERO行 ,以查找在DB中具有生日的日期。
如何处理格式化日期以便查询以忽略年份?
我在把它交给查询之前尝试将其格式化,但是当用Php计算日期时,我有点混淆了。
有关如何解决此问题的任何建议?
尝试使用DAYOFYEAR而不是字符串比较。
更新:我还需要补充一点,你的日期应该用冒号包装,以便正常工作'2004-04-15'。
这是我的解决方案:
SELECT * FROM `customer` c LEFT JOIN `" . DB_PREFIX . "pet` p
ON (c.customer_id = p.customer_id)
WHERE (DAYOFYEAR(p.petbday) BETWEEN (DAYOFYEAR('" . $pet_bdate . "'))
AND (DAYOFYEAR(DATE_ADD('" . $pet_bdate . "', INTERVAL " . $plus_days . " DAY))))
GROUP BY c.customer_id ORDER BY firstname, lastname, email
因此,为了获得DATE RANGE,我在列本身p.petbday和两个范围日期使用了DAYOFYEAR (作为andig建议):
$pet_bdate - ORIGINAL STARTING DATE
DATE_ADD('" . $pet_bdate . "', INTERVAL " . $plus_days . " DAY) - ORIGINAL
STARTING DATE PLUS INTERVAL DAYS
我使用DATE_ADD,因为我的MySQL版本是v5.5.23
注意:两个日期都需要作为字符串传递(因此单引号)。
希望你发现这个有用......
$('input[name="pet_bdate"]').datepicker({
dateFormat: 'yy-mm-dd',
yearRange: '2000:2000', // one year - leap year
changeMonth: true,
changeYear: false, // NO **Year** drop down box
numberOfMonths: 1,
minDate: new Date('2000/01/01'), // START date
maxDate: new Date('2000/12/31'), // END date
beforeShow: function(input, instance) {
var firstDate = new Date('2000/01/01');
if (this.val != 0) {
$('input[name="pet_bdate"]').datepicker( 'setDate' , $('input[name="pet_bdate"]').val());
} else {
$('input[name="pet_bdate"]"]').datepicker('setDate', firstDate);
}
}
});
$('#ui-datepicker-div').removeClass('ui-helper-hidden-accessible');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.