Php 插入表格选择未提供正确的最后\u id

Php 插入表格选择未提供正确的最后\u id,php,mysql,Php,Mysql,我在MYSQL中有两个具有类似列的表。我正在使用插入表2的将数据从一个复制到另一个,从表1中选择*,其中column1=smth。我有不同的列作为autoincrement和KEY-in表。当我使用mysqli\u insert\u id时,我会插入第一个,而不是最后一个。有办法得到最后一个吗 谢谢关系数据库中没有数据的继承顺序。您必须指定您希望通过以下方式订购的字段: INSERT INTO table2 SELECT * FROM table1 WHERE column1=smth

我在MYSQL中有两个具有类似列的表。我正在使用插入表2的
将数据从一个复制到另一个,从表1中选择*,其中column1=smth
。我有不同的列作为autoincrement和KEY-in表。当我使用
mysqli\u insert\u id
时,我会插入第一个,而不是最后一个。有办法得到最后一个吗


谢谢

关系数据库中没有数据的继承顺序。您必须指定您希望通过以下方式订购的字段:

INSERT INTO table2 
SELECT * 
FROM table1 
WHERE column1=smth 
ORDER BY <field to sort by here> 
LIMIT 1;
插入到表2中
选择*
来自表1
其中第1列=smth
订购人
限值1;
依靠记录写入表的顺序是一个非常糟糕的主意。如果在
table1
上有一个自动编号的
id
,则只需使用
orderbyid desclimit 1
按id对结果集进行降序排序,然后选择最后一个


更新以解决OP关于
mysqli\u insert\u id

根据Mysql引用,这里调用的函数是
last\u insert\u id()
,其中声明:

重要信息:如果使用单个insert语句插入多行, LAST_INSERT_ID()返回为第一个插入的 只有一排。这样做的原因是为了使复制成为可能 很容易对其他服务器使用相同的INSERT语句

不幸的是,您必须进行第二次查询才能获得真正的“最后插入的id”。您的最佳选择可能是从表1中运行
SELECT COUNT(*),其中column1=smth
然后使用该
count(*)
return添加到
mysqli\u insert\u id
值。这不是很好,但如果你有高容量,而这一功能经常受到攻击,这可能是最安全的途径


较不安全的路线是
从表2中选择最大(id)或
从表2中选择最大(id),其中column1=smth
。但是同样,根据您的键和插入的次数,这可能有风险。

如果您不共享有关数据库结构、示例数据和PHP代码的任何信息,则无法回答此问题。乍一看,您根本不应该得到任何自动增量,因为您似乎没有将任何列留空,但这当然只是猜测。mysqli_insert_id()无论如何只会给您一个id值。无法从多记录插入中获取ID。如果您需要id,请执行单个/单个插入和最后一次插入\u id()每个插入。对不起,我想我不是很清楚。问题是SELECT位返回一些记录,当这些记录被添加到表2中时,mysqli_insert_id返回第一个自动校正的id。因此,如果它从表1中选择3条记录,将它们插入表2中并为它们创建id 4,5,6-mysqli_insert_id将返回4,而不是6。明白了!我总是在这里找到最低的公分母。我已经回答了足够多的问题,其中有人依赖InnoDB中的记录顺序,我只是假设这就是它的意思。我已经尽了最大努力专门回答了您关于
mysql\u insert\u id()