为什么要忽略此WHERE子句中的第二个标准?
$old = time() - 2592000;
$sql_deleteold = ("DELETE FROM todolist WHERE status='done' AND stamp < $old");
mysql_query($sql_deleteold);
我想从状态为“已完成”的30天以上的数据库中删除数据。
相反,它将删除状态为“done”的所有行。
答案 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
。