SQL忽略WHERE子句中的第二个条件

问题描述:

为什么WHERE子句中的第二个条件会被忽略?SQL忽略WHERE子句中的第二个条件

$old = time() - 2592000; 
$sql_deleteold = ("DELETE FROM todolist WHERE status='done' AND stamp < $old"); 
mysql_query($sql_deleteold); 

我想从状态为“已完成”的30天以前的数据库中删除数据。

相反,它会删除状态为“已完成”的所有行。

+4

第二个陈述是什么?如果你的意思是第二个条件表达式,那么它将不会被“忽略”。没有一个测试用例(或模式 - 什么是“印记”?),你不能进一步得到帮助。 –

+0

什么数据类型是'stamp'?如果它是MySQL'DATETIME'类型,则需要'FROM_UNIXTIME($ old)' –

+0

为了试图在SQL语句的各个部分与英语中的书写语句之间建立一个类比,SQL语句的各个部分被调用“子句”和子句的部分称为“谓词”。我在这里假设他是第二个谓词。 –

我认为你的问题是指SQL查询中的“第二条语句”?

有了这个假设,所有行被删除状态为“完成”的问题是因为WHERE过滤器类似于“If”语句中使用的条件语句。

如果第一条语句或WHERE过滤条件为true,则执行。

试着做以下几点:

$old = time() - 2592000; 
$sql_deleteold = ("DELETE FROM todolist WHERE (status='done' AND stamp < $old)"); 
mysql_query($sql_deleteold); 

您还可能需要验证的$值老在表格的“邮票”字段比较它的值,以确保有一些在'stamp'字段中的值大于$ old的值的行。

您是否尝试过调试您的查询?请不要删除查询请尝试选择值:

SELECT * FROM todolist WHERE status = 'done' AND stamp < $old 

是否选择您期望的结果?如果它没有继续调整它,那么尝试删除记录。

+0

那着名的“SELECT * FRIN table”语法 –

+0

oops我的输入错误,我改正了 –

+0

'$ odl'不行。 –

尝试发行SELECT stamp FROM todolist,看看你得到什么。据推测,它们的值将小于time() = 2592000

您可能有引用问题。可以肯定的,试试:

$sql_deleteold = "DELETE FROM `todolist` WHERE `status`='done' AND `stamp` < '".$old."';"; 

此外,当您插入字段,你设置用PHP $时间()$函数stamp场,或者它被SQL函数设置?因为时间表示可能会根据stamp字段的类型而有所不同。