2012-06-12 79 views
1

我有一箇舊的註冊系統和一個新的註冊系統。 (兩張桌子)。
舊的系統擁有一箇舊的類別,而新的系統擁有一些舊類別尚未實現的新類別。
因此,將所有內容移至其中一個系統目前不是一種選擇。從表#1中獲取最後一個ID以阻止表#2的新ID

我的問題:
我需要將兩個表連接,因此ID的「自動增量」操作,將按照對方莫名其妙。

這裏是一個情形:
//表#1 =舊系統(汽車)
//表#2 =新的系統(拖拉機,卡車,船舶)

新車註冊於表#1並獲取ID:13579,
和其它一些車輛在表#2註冊和應該得到的ID:13580,
當新車在註冊表#1再次,它應該得到ID:13581.
等等...

在我心中它是這樣的:
右鍵添加新的車輛進入一個表的前,總是做另一個表的查找和檢查哪一個是最後一個/最高ID和設置新的ID之前做+1 ...

UPDATE 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更深的腳本,我用更多的數據更新該記錄...

這是一個可以接受的解決方案嗎?

+1

一種方法是查詢table1中的最後一個ID,並在使用table1查詢結果爲第二個表創建insert語句時執行+1。 – Eli

+0

如果是這樣的話,用[tag:homework]標記你的問題,併發布你已經使用的任何'php' /'sql'。 –

+0

如果許多用戶可能同時添加車輛,則應將讀取前一個ID的請求和請求設置爲事務中的新ID並使用鎖來避免併發問題。 – Aurel

回答

1

我想你可以使用這種方法。

也可以創建新表,與這些字段:

id (auto increment), table_id, table_name

,並保存到它table_id - 是ID爲你的餐桌實體,table_name - 一些屬性,決定哪個表屬於此ID。在選擇期間,您必須使用此表來確定要使用的ID。這將避免id計算。

+0

創建一個帶有自動增量的新表並首先插入此表,然後使用mysql_insert_id()獲取ID以獲取任何表的新ID。 ? 這聽起來很有希望,雖然我真的很想不用另一張桌子...... – ThomasK

+0

不,你需要在兩張桌子上插入。在table1和這個relation_table。例如:'table1:id = 356(它是自動增量)',並且您需要保存在relation_table:id = 800(它是自動增量)table_id = 356,table_name = table1。而當你選擇你必須加入表格。 –