使用PDO在一个表中查找记录并将数据追加到另一个表

时间:2019-07-19 05:42:59

标签: php mysql pdo

我有2个表,每个表有3列

Table1具有一列idcodename Table2有一列idnametable1id

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中最后创建的记录,但是我不确定如何从此处继续。

这是所描述的两个表的直观表示: enter image description here

更新:

最后插入的id分配给变量$ last_id,如下所示:

Table2

3 个答案:

答案 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。