mysql只有在另一个字段为空或空时才从行中删除

时间:2016-03-12 17:54:47

标签: php mysql

我有一个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());

2 个答案:

答案 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());