Php 表之间的自动增量
我有两张桌子,一本书和一本书。两者的结构相同Php 表之间的自动增量,php,mysql,sql,forms,Php,Mysql,Sql,Forms,我有两张桌子,一本书和一本书。两者的结构相同 id title author isbn year 然后,我在两个不同的php页面上有两个web表单,它们将数据发送到相应的表-“Book Form”和“G Book Form” 当我提交“Book Form”时,Book table id成功递增,同样,当我提交“G Book Form”时,gbook table id递增。但是,如何设置表,使两个表之间的id连接/共享?也就是说,id将从最后一次表单插入结束的位置自动递增 我之所
id title author isbn year
然后,我在两个不同的php页面上有两个web表单,它们将数据发送到相应的表-“Book Form”和“G Book Form”
当我提交“Book Form”时,Book table id成功递增,同样,当我提交“G Book Form”时,gbook table id递增。但是,如何设置表,使两个表之间的id连接/共享?也就是说,id将从最后一次表单插入结束的位置自动递增
我之所以想这样做,但不了解最佳方法,是因为我的“图书表单”允许用户手动添加图书信息。而“G图书表单”则使用谷歌图书Api自动填充图书信息
理想情况下,我希望我的书桌是这样的
id
1
2
4
5
8
9
id
3
6
7
和gbook表类似
id
1
2
4
5
8
9
id
3
6
7
这里对php/mysql非常陌生,因此任何建议或指导都非常感谢。如果需要,我可以提供现有代码。最好的方法可能是将它们放在同一个表中,用一个特殊的列指定它是哪种类型的书。最好的方法可能是将它们放在同一个表中,用一个特殊的列指定它是哪种类型的书。另一种方法可能会有所帮助。将所有数据放在一个表中,添加一个额外的列FK,并创建另一个包含图书类型的表 tbl_书籍 tbl_图书类型 另一种选择可能会有所帮助。将所有数据放在一个表中,添加一个额外的列FK,并创建另一个包含图书类型的表 tbl_书籍 tbl_图书类型
您可以通过php实现这一点。每次表中的一个发生更改时,都必须运行alter查询。例如: 如果要向book表中插入值,可以使用mysql\u insert\u ID获取该表的增量ID,并在alter查询中使用它
$id = mysql_insert_id() + 1;
ALTER TABLE tablename AUTO_INCREMENT= $id;
尽管这种方法不被推荐,也不是标准做法。您可以通过php实现这一点。每次表中的一个发生更改时,都必须运行alter查询。例如: 如果要向book表中插入值,可以使用mysql\u insert\u ID获取该表的增量ID,并在alter查询中使用它
$id = mysql_insert_id() + 1;
ALTER TABLE tablename AUTO_INCREMENT= $id;
尽管这种方法不被推荐,也不是一种标准做法。另一个想法:
从两个表中禁用自动递增。使用SQL命令MAXiD从两个表中读取最大值并递增结果:
从Book Form中选择MAXiD并将其存储到变量中。然后执行SELECTMAXID from G Book Form store it。比较两个值并将其递增一
不过,在我看来,最好的主意来自blue112。有时,推广数据库是一个好主意。另一个想法:
从两个表中禁用自动递增。使用SQL命令MAXiD从两个表中读取最大值并递增结果:
从Book Form中选择MAXiD并将其存储到变量中。然后执行SELECTMAXID from G Book Form store it。比较两个值并将其递增一
不过,在我看来,最好的主意来自blue112。有时推广数据库是个好主意。为什么要这样做?不受支持的功能是不这样做的一个好迹象。更新时有一个原因,这也是非常新的,所以请欣赏评论。其他数据库,如Oracle、SQL Server、Postgres等有可定义的序列,您可以应用于任何表,但据我所知,MySQL没有。除了运行一个存储过程来检查一个表的最大值之外,我认为最好的解决方案是将它们都放在一个表上。为什么要这样做?不受支持的功能是不这样做的一个好迹象。更新时有一个原因,这也是非常新的,所以请欣赏评论。其他数据库,如Oracle、SQL Server、Postgres等有可定义的序列,您可以应用于任何表,但据我所知,MySQL没有。除了运行一个存储过程来检查一个表的最大值之外,另一个我认为最好的解决方案是将它们都放在一个表上。这是可行的,我创建了一个新列,分别添加了“g”或“m”。这是可行的,我创建了一个新列,分别添加了“g”或“m”。