SQLite 3,复制一行并只更改一个字段

时间:2015-02-12 13:28:49

标签: php sql sqlite

我的SQLite3数据库中有一些表,例如

  • 表1
  • 表2
  • 表3

所有表都有一个名为id的字段(整数NOT NULL PRIMARY KEY UNIQUE)( not auto increment

我的目标是复制其中一个表的记录,只更改id字段(使用新的id)。我想这样做而不必知道每个表中所有列的名称。

我尝试了这个解决方案,它可以工作,但这样我就必须知道所有列的名称

INSERT INTO table1 (id,column1,column2,column3)
SELECT NEWID,column1,column2,column3 FROM table1
WHERE id = OLDID

我还尝试了创建临时表的方法,但没有成功

我必须运行像PRAGMA table_info(table1)这样的查询,将列的名称保存在数组中,然后运行使用循环创建的查询?

感谢


我的解决方案

$TABLENAME = "mytablename";
$ID = 1423659222480;
$NEWID = 1423659222481;

$db = new PDO('sqlite:db.sqlite3');

$result_columns = $db->query("PRAGMA table_info(".$TABLENAME.")");
$appColumns = array();
$appColumns2 = array();
foreach ($result_columns as $row) {
    array_push($appColumns, $row["name"]); 
    if($row["name"] != "id") array_push($appColumns2, $row["name"]);
}

$appColumns = implode(",",$appColumns);
$appColumns2 = implode(",",$appColumns2);
$appColumnsWithoutID = $NEWID.",".$appColumns2;

$queryDuplicate = "INSERT INTO ".$TABLENAME." (".$appColumns.") SELECT ".$appColumnsWithoutID." FROM ".$TABLENAME." WHERE id = ".$ID;

0 个答案:

没有答案