【发布时间】:2015-06-30 21:11:47
【问题描述】:
第一个问题,我一直在不懈地寻找答案,但似乎人们在指表时会问“从一个数据库到另一个”。总之……
我有一个数据库,里面有很多表格,记录了各种游戏绘图的结果。这些表有许多不同的结构,最少的有 5 个字段,最大的有大约 20 个。我还有一个数据库,其中包含这些游戏超过一年的结果表。所以在 db1 我有 game1,在 db2 我有 game1_archive。我正在编写的是一个脚本,它每天运行一次并将任何条目从 db1 表中超过一年的时间移动到相应的 db2 表中。
我在 db1 中有一个要迭代的表列表:
try {
$db1_pdo = new PDO($db_game, $db_username, $db_password);
$db2_pdo = new PDO($db_archive, $db_username, $db_password);
} catch (PDOException $exception) {
echo 'Connection failed: ' . $exception->getMessage();
die();
}
$cutoff_date = date('Y-m-d', time() - (366 * 24 * 60 * 60));
$tables = array();
$result = $db1_pdo->query("SHOW TABLES");
$tables = $result->fetchAll(PDO::FETCH_COLUMN, 0);
最容易做的就是像这样的 INSERT INTO _ FROM _ WHERE _ 查询:
foreach ($tables as $table) {
$result = $db1_pdo->query("INSERT INTO archive.$table"."_archive * FROM $table WHERE drawing_date < '$cutoff_date'");
$db1_pdo->query("DELETE FROM $table WHERE drawing_date < '$cutoff_date'");
}
但这不起作用,我认为是因为 db1_pdo 无权访问这两个数据库?访问两个数据库的用户名和密码相同。有没有一种简单的方法可以让 INSERT INTO 工作?如果我有手动构建语句来插入,那会很痛苦,因为每个表都有不同的结构。
【问题讨论】:
-
您缺少
SELECT关键字。编写返回所需行的SELECT查询。然后在此之前添加 INSERT INTO foo (cols)`,将其转换为INSERT .. SELECT语句。