2014-12-05 137 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