【问题标题】:Auto Increment Between Tables表之间的自动增量
【发布时间】:2015-02-03 10:47:12
【问题描述】:

我有两个表 bookgbook。两者结构相同;

id   title   author   isbn   year

然后,我在两个不同的 php 页面上有两个 Web 表单,它们将数据发送到相应的表格 - 'Book Form' 和 'G Book Form'。

当我提交“图书表格”时,图书表 ID 会成功增加,同样,当我提交“G 图书表格”时,gbook 表格 ID 也会增加。但是,我如何设置我的表,以便在两个表之间加入/共享 id?这意味着,id 将从最后一个表单插入停止的地方自动递增。

我想这样做(以及不了解最佳方法)的原因是因为我的“图书表单”允许用户手动添加图书信息。而“G Book Form”使用 Google Books Api 自动填充图书信息。

理想情况下,我希望我的 book 桌子是这样的;

id
1
2
4
5
8
9

gbook 表是这样的;

id
3
6
7

这里对 php/mysql 很陌生,因此感谢任何建议或指导。如有必要,我可以提供现有代码。

【问题讨论】:

  • 你为什么要这样做?不支持的功能是不支持的好兆头。
  • 更新有一个原因,再次对此很新,所以感谢评论。
  • Oracle、SQL Server、Postgres 等其他数据库具有可定义的序列,您可以将其应用于任何表,但据我所知 MySQL 没有。除了运行一个存储过程来检查一个表的最大值之外,另一个我想最好的解决方案是将它们都放在一个表上。

标签: php mysql sql forms


【解决方案1】:

替代方案可能会有所帮助。将所有数据放在一个表中,添加一个额外的列(FK)并创建另一个表包含书籍类型。

tbl_books

id   booktype_id   title   author   isbn   year


tbl_booktypes

id   type

【讨论】:

    【解决方案2】:

    最好的办法可能是将它们放在同一个表中,并用一个特殊的列指定它是哪种类型的书。

    【讨论】:

    • 这行得通,我创建了一个新列,分别添加了“g”或“m”。
    【解决方案3】:

    你或许可以通过 php.ini 来实现。每次其中一个表发生更改时,您都必须运行更改查询。例如: 如果您将值插入到 book 表中,您将使用 mysql_insert_id() 获取该表的增量 ID,并在 alter 查询中使用它。

        $id = mysql_insert_id() + 1;
        ALTER TABLE tablename AUTO_INCREMENT= $id;
    

    虽然不推荐这种方法,也不是标准做法。

    【讨论】:

      【解决方案4】:

      另一个想法:

      禁用两个表的自动增量。使用 SQL 命令MAX(iD) 从两个表中读取最大值并递增结果:

      Select MAX(iD) From Book Form 并将其存储到变量中。然后执行Select MAX(iD) from G Book Form 存储它。比较两个值并将其加一。

      不过,在我看来,最好的创意来自 blue112。概括您的数据库架构有时是个好主意。

      【讨论】:

        猜你喜欢
        • 2012-07-27
        • 1970-01-01
        • 2017-03-07
        • 2011-12-05
        • 2012-04-28
        • 2021-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多