首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有当另一个字段为空或空时,mysql才从行中删除

问只有当另一个字段为空或空时,mysql才从行中删除
EN

Stack Overflow用户
提问于 2016-03-12 17:54:46
回答 2查看 745关注 0票数 0

我有一个php / mysql事件列表,如果记录已过启动日期(field_1),并且没有未来的结束日期集( field_5 ),那么我就会陷入困境,只想自动删除一个记录,所以在删除它之前,field_5需要是空的。在mysql dbase上,开始日期字段和结束日期字段都设置为null。我可以使用下面的代码获得删除已失效事件的代码,但我不知道如何应用mysql逻辑/条件代码来检查终结日期(field_5)是否已设置或为空,因此,如果该字段设置为字符串日期,则防止删除。有人能告诉我吗?

代码语言:javascript
复制
$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());
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-12 18:03:55

尝试添加检查field_5是否为NULL或等于空字符串的代码:

代码语言:javascript
复制
$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都超过当前日期并需要删除),那么我们可以使用以下代码:

代码语言:javascript
复制
$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());
票数 2
EN

Stack Overflow用户

发布于 2016-03-12 18:04:03

我认为逻辑应编码为:

代码语言:javascript
复制
DELETE e FROM events3 e
    WHERE field_1 <= NOW() AND field_5 is null;

我认为在这个查询中不需要变量。

如果错误地将日期值存储为字符串,则需要str_to_date()。

代码语言:javascript
复制
DELETE e FROM events3 e
    WHERE STR_TO_DATE(field_1, '%m/%d/%Y') <= NOW() AND field_5 is null;

将日期存储为字符串是一种糟糕的做法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35961278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档