2014-12-05 42 views
1

我有两个表本书gbook。两者的结构都是一样的;表间自动增量

id title author isbn year 

那么我对将数据发送到相应的表两种不同的PHP页面两个Web窗体 - “书的形式”和“摹书的形式”。

当我提交'Book Form'时,book table id会成功递增,同样,当我提交'G Book Form'时,gbook table id会递增。但是,如何设置我的表格,以便在两个表格之间加入/共享ID?这意味着,ID将自动从最后一次插入表单插入的位置开始递增。

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

理想情况下,我想我的表是什么样的;

id 
1 
2 
4 
5 
8 
9 

而且GBOOK表是这样的;

id 
3 
6 
7 

很新的PHP/MySQL在这里所以任何意见或方向表示赞赏。如有必要,我可以提供现有的代码。

+4

为什么你想这么做?不支持的功能是不做的一个好兆头。 – 2014-12-05 09:46:32

+0

更新了一个理由,对此再次相当新颖,所以欣赏评论。 – 2014-12-05 09:52:51

+0

其他数据库,如Oracle,SQL Server,Postgres等都有可定义的序列,您可以将其应用于任何表,但据我所知MySQL不。除了运行一个检查一个表的最大值的存储过程,另一个我会想到最好的解决方案是将它们都放在一个表上。 – Lucas 2014-12-05 10:03:16

回答

3

您将拥有的最佳方式可能是将它们放在同一个表中,并使用特殊列指定它是哪种类型的书。

+0

这个工程,我创建了一个新的列,分别添加'g'或'm'。 – 2014-12-05 10:09:31

4

替代可能有所帮助。把所有的数据放在的一张表上加一个额外的列(FK)并创建另一张表组成书的类型。

tbl_books

id booktype_id title author isbn year 


tbl_booktypes

id type 
+0

葛丽泰的想法谢谢 – 2014-12-05 10:02:51

1

您可以通过PHP来实现这一目标。每次表中有一个变化时,您都必须运行alter query。例如: 如果您将值插入到书本表中,则使用mysql_insert_id()获得该表的增量ID,并在alter query中使用该值。

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

尽管这种方法不被推荐,也不是标准的做法。

1

另一种想法:

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

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

虽然,在我眼中,最好的想法来自blue112。概括一下你的数据库有时是一个好主意。

+0

我会考虑这个选项谢谢 – 2014-12-05 10:09:46