0

我发现了很多关于如何使用选择然后删除的示例,但是,

我希望将数据从一个表移动到另一个表,并且列不匹配,例如

表 1 ( id, location, lat, lon, date_added)

表 2 ( id, location, lat, lon, date_added, requested)

本质上,我想从 table1 中插入一行并将 $_SESSION['user_name'] 添加到请求的字段中,然后从第一个表中删除原始行。

我尝试了一些不同的东西

$sql = "START TRANSACTION;
INSERT INTO bia_signs_pending (SELECT * FROM bia_signs WHERE id = ".$_GET['sign_id'].');

DELETE FROM bia_signs WHERE id = '          .$_GET['sign_id'].';
UPDATE bia_signs_pending SET requested='    .$_SESSION['user']['email'].
'WHERE id = '.$_GET['sign_id'].';
COMMIT;';

//这个因为列不匹配而中断

有什么建议么?

4

3 回答 3

1

您可以使用INSERT列名

INSERT INTO TABLE2 (id, location, lat, lon, date_added)
SELECT id, location, lat, lon, date_added 
FROM table1 
WHERE ...

您可以将常量添加到INSERT

INSERT INTO TABLE2 (id, location, lat, lon, date_added, requested)
SELECT id, location, lat, lon, date_added, 'Jonny'
FROM table1
WHERE ...
于 2013-07-03T07:01:29.827 回答
1

只需更改您的插入

INSERT INTO bia_signs_pending (SELECT FROM bia_signs WHERE id = ".$_GET['sign_id'].');

INSERT INTO bia_signs_pending (id, location, lat, lon, date_added) VALUES (SELECT * FROM bia_signs WHERE id = '".$_GET['sign_id'].');
于 2013-07-03T07:01:39.287 回答
0

更改您的 INSERT 语句,添加您选择的字段列表:

INSERT INTO bia_signs_pending (id, location, lat, lon, date_added)
            SELECT * FROM bia_signs WHERE id = '{$_GET['sign_id']}';
于 2013-07-03T07:01:11.123 回答