我有一个php / mysql事件列表器,我来了,我只想自动删除记录,如果它的startdate(field_1)已经过去并且没有未来的enddate设置(field_5),那么field_5在被删除之前需要为空。 mysql dbase上的开始日期和结束日期字段都设置为null。 我可以使用下面的代码获取代码来删除已失效的事件,但我不知道如何应用检查enddate(field_5)是否设置或为空所需的mysql逻辑/条件代码,从而防止在设置该字段时删除带字符串日期。有人可以提出建议吗?
$eventstart ="STR_TO_DATE(field_1, '%m/%d/%Y')";
$eventend ="STR_TO_DATE(field_5, '%m/%d/%Y')";
mysql_query("DELETE FROM events3 WHERE $eventstart < $date ") or die(mysql_error());
答案 0 :(得分:3)
我认为逻辑编码为:
DELETE e FROM events3 e
WHERE field_1 <= NOW() AND field_5 is null;
我在此查询中看不到任何变量需求。
如果您错误地将日期值存储为字符串,则需要str_to_date()
:
DELETE e FROM events3 e
WHERE STR_TO_DATE(field_1, '%m/%d/%Y') <= NOW() AND field_5 is null;
将日期存储为字符串是一种不好的做法。
答案 1 :(得分:2)
尝试使用以下代码添加检查field_5是否为NULL或等于空字符串:
$eventstart ="STR_TO_DATE(field_1, '%m/%d/%Y')";
$eventend ="STR_TO_DATE(field_5, '%m/%d/%Y')";
mysql_query("DELETE FROM events3
WHERE $eventstart < $date AND
(field_5 IS NULL OR field_5 ='')"
) or die(mysql_error());
如果我们需要删除包含一组已开始和结束日期的行(因此field_1和field_5都已过去当前日期且保证删除),我们可以使用此代码:
$eventstart ="STR_TO_DATE(field_1, '%m/%d/%Y')";
$eventend ="STR_TO_DATE(field_5, '%m/%d/%Y')";
mysql_query("DELETE FROM events3
WHERE $eventstart < $date AND
(field_5 IS NULL OR field_5 ='' OR $eventend < $date)"
) or die(mysql_error());