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

时间:2011-11-15 17:01:24

标签: mysql sql

为什么要忽略此WHERE子句中的第二个标准?

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

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

相反,它将删除状态为“done”的所有行。

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

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

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

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

尝试执行以下操作:

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

您还可能需要验证$ old的值并将其与表中“stamp”字段中的值进行比较,以确保在“戳记”字段中有一些值具有值大于$ old的值。

答案 2 :(得分:1)

您可能有引用问题。当然,请尝试:

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

此外,当您插入字段时,是否使用php $ time()$函数设置stamp字段,还是由SQL函数设置?因为时间表示可能会有所不同,具体取决于stamp字段的类型。

答案 3 :(得分:0)

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