【问题标题】:get last id from table#1 to determen new ID on table#2从表#1 中获取最后一个 ID 以确定表#2 上的新 ID
【发布时间】:2012-06-12 08:16:27
【问题描述】:

我有一个旧的注册系统和一个新的。 (两张桌子)。
旧系统包含一个旧类别,新系统包含一些新类别,这些新类别还不能在旧系统中实现。
因此,目前无法将所有内容移至其中一个系统。

我的问题:
我需要连接这两个表,以便 ID 以“自动增量”的方式运行,并且会以某种方式相互跟随。

这是一个场景:
// table#1 = 旧系统(汽车)
// table#2 = 新系统(拖拉机、卡车、船舶)

一辆新车在 table#1 中注册并获得 ID:13579,
然后在 table#2 中注册了一些其他车辆,并且应该获得 ID:13580,
当一辆新车再次在 table#1 中注册时,它应该得到 ID : 13581。
等等……

在我看来是这样的:
在将新车添加到其中一个表之前,始终在另一个表中查找并检查哪个是最后/最高 ID,并在设置新 ID 之前执行 +1...

更新 20120614:
这是我想出的一种解决方案:

$qry_tbl1 = mysql_query('SELECT MAX(id) AS tbl1_max_id FROM tbl1');
$get_tbl1 = mysql_fetch_assoc($qry_tbl1); extract($get_tbl1);

$qry_tbl2 = mysql_query('SELECT MAX(id) AS tbl2_max_id FROM tbl2');
$get_tbl2 = mysql_fetch_assoc($qry_tbl2); extract($get_tbl2);

$new_max_id = max(array($tbl1_max_id,$tbl2_max_id)) + 1;

这不是一个好的解决方案,但却是我唯一需要解决的问题。
用户点击提交按钮后,我立即执行此操作并插入新记录。 然后,在脚本的下方,基于$new_max_id,我用其他数据更新该记录...

这是一个可接受的解决方案吗?

【问题讨论】:

  • 一种方法是查询 table1 中的最后一个 ID,并在使用 table1 查询结果为第二个表创建插入语句时执行 +1。
  • 如果是这种情况,请用homework 标记您的问题,然后发布您已经提供的任何php/sql
  • 如果很多用户可能同时添加车辆,你应该将读取前一个id的请求和设置新id的请求分组在一个事务中,并使用锁来避免并发问题。
  • 这不是家庭作业。而且我还没有任何 php 代码,因为我不知道从哪里开始......我可以依靠这个方法吗:SELECT MAX(ID) AS last_id FROM other_table 然后做$new_id = $get['last_id'] + 1;

标签: php mysql auto-increment multiple-tables


【解决方案1】:

我认为您可以使用这种方法。

或者您可以创建新表,包含这样的字段:

id (auto increment), table_id, table_name

并保存到其中 table_id - 是您的表实体的 id,table_name - 是一些属性,它决定了该 id 属于哪个表。在选择期间,您必须使用此表来确定要使用的 id。这将避免 id 计算。

【讨论】:

  • 创建一个具有自动增量的新表并首先插入该表,然后使用 mysql_insert_id() 获取 ID 以获取哪个表的新 ID。 ?听起来很有希望,虽然我真的不想再有一张桌子......
  • 不,您需要在两个表中插入。在table1 和这个relation_table。例如:table1: id=356(it's auto increment),需要保存在relation_table:id=800(自增)table_id=356,table_name=table1。当你做出选择时,你必须加入表格。
猜你喜欢
  • 1970-01-01
  • 2017-08-29
  • 2012-12-24
  • 2018-03-26
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
相关资源
最近更新 更多