我有2个表,每个表有3列
Table1
具有一列id
,code
和name
Table2
有一列id
,name
和table1id
在Table2
中创建新记录时,需要使用该名称的table1id
来填充Table1
列。
查询必须查看在Table2
中创建的最后一个ID,并将Table2
name列与Table1
中的名称匹配,然后将与该名称关联的ID附加到{{1 }}。
该如何正确完成?以下是我拥有的PDO结构:
Table2
变量 $last_id = $conn->lastInsertId();
$stmt = $conn->prepare('UPDATE `Table2` SET `table1id` = :last_id_0) WHERE `id` = :last_id');
$stmt->execute([
]);
应该基于:table1id
中最后创建的记录,但是我不确定如何从此处继续。
更新:
最后插入的id分配给变量$ last_id,如下所示:
Table2
答案 0 :(得分:1)
我想我知道你想要什么。我假设chips = Result(a, b, c, chips, bet);
cout << "Player's chips: " << chips << " \n";
已经存在很长时间了,您要做的就是在table1
中插入一行。您可以像这样使用INSERT INTO SELECT:
table2
此查询使用从$stmt = $conn->prepare('INSERT INTO `Table2` (`name`, `table1id`)
SELECT `name`, `id`
FROM `table1`
WHERE `table1`.`name` = :name');
$stmt->execute(['name' => $_POST['name']]);
中选择的名称和ID向table2
中插入新行。 table1
中选定的记录是具有匹配名称的记录。
请注意,只有在table1
中的名称唯一时,此才有效。
答案 1 :(得分:1)
如果您需要根据table1.name更改table2.table1id。
$last_id = $conn->lastInsertId();
$stmt = $conn->prepare('UPDATE Table2
INNER JOIN table1 ON Table1.name = Table2.name
SET Table2.table1id = :id
WHERE Table1.name = :name');
$stmt->execute(['id'=>$last_id , 'name' => $_POST['name']])
答案 2 :(得分:0)
为什么不写一个完全符合您要求的查询?
在一个表中查找记录
$stmt = $conn->prepare('SELECT id from table1 where name=?');
$stmt->execute([$_POST['name']]);
$row = $stmt->fetch();
将数据追加到另一个
$stmt = $conn->prepare('INSERT INTO `Table2` (`table1id`) VALUES (:t1id)');
$stmt->execute(['t1id' => $row['id']);
请注意,在表中复制数据是一个非常糟糕的主意,因此最好仅在表1中保留名称。您始终可以使用JOIN将其用于table2。