【发布时间】:2014-03-24 20:38:21
【问题描述】:
我有一个数据库,其中条目插入到带有时间戳的表中(来自 PHP 的 time() 的 int 不是 SQL 时间戳)。我想进行查询以删除最大时间戳小于到期时间的所有表(从执行查询时开始的某个时间)。现在我有
$q = mysqli_query(..., "SHOW TABLES LIKE 'prefix%'");
if($q===FALSE) die(mysqli_error(...));
for($row in mysqli_fetch_array($q)){
$slice = array_slice($row, 0, 1);
$tbl = array_shift($slice);
mysqli_query(..., "DROP TABLE `$tbl` WHERE ((SELECT GREATEST (SELECT `time` FROM `$tbl`)) <= $expiry_time)");
}
这会导致 SQL 语法错误。
实现这一目标的正确方法是什么? 另外,是否有可能消除 PHP 逻辑,只在 SQL 中循环遍历每个表并在必要时将其删除?
【问题讨论】:
-
DROP TABLE 命令上没有 WHERE 子句。确定要删除表而不是删除行吗?
-
我打赌这可以在存储过程中使用循环中的准备好的语句来完成。 dev.mysql.com/doc/refman/5.5/en/…
-
我应该在发布之前查看 drop table 的语法。我的错。你是对的,它没有where子句。那么我想要的结果如何实现呢?
标签: php mysql sql drop-table