2012-11-03 205 views
0

我有一個帶有自動遞增字段的SQL表。我知道人們已經詢問如何在插入後發現'最後一次入境'的ID,我知道該怎麼做。我想要做的就是複製到同一表的第二列自動生成的領域 - 如何修改我的插入代碼來做到這一點:SQL自動遞增ID

mysql_query("INSERT INTO `tags` (`tid`,`tagid`,`tagname`) VALUES('','INSERTED.ID','{$tagname}')"); 

我想這樣做的原因是因爲我希望能夠使兩行相等。 I.E.如果兩個不同的標籤(具有不同的唯一ID)具有相同的tagid,那麼我可以在別處使用'tagid'引用作爲唯一標識符並循環訪問它們。我還可以保留哪些標籤是父標籤的知識 - 因爲它與'tagid'具有相同的'tid'。

我有一個標記事件的系統;但有時候我會拼錯一個標籤...所以我不想糾正所有的錯誤,我想讓我的系統通過允許錯誤拼寫的標籤進行錯誤驗證,並以與正確標籤相同的方式進行處理。

希望得到您的幫助 - 即使這意味着以完全不同的方式進行操作。

謝謝,

+0

第二個查詢呢? –

+0

這是一種反模式。我不會推薦它。 –

回答

0

2個選擇:

1)您可以使用MySQL的LAST_INSERT_ID()功能,但在第二個查詢,不一樣的。

SELECT LAST_INSERT_ID(); 

2)定義插入Trigger在表中,那麼當你插入時,觸發「觸發器」,做的觸發動作。

CREATE TRIGGER tag_tid BEFORE INSERT ON tags 
FOR EACH ROW NEW.tid = NEW.id; 

注:短創建者,請參閱鏈接中的更多內容。

+0

非常好。我會嘗試觸發器。謝謝 – Simeon

+0

感謝您的幫助 - 我決定做2個單獨的查詢,以防止因我的代碼隱藏觸發器而感到困惑。 – Simeon

0

你必須改變表設置字段爲自動增量。然後我相信,當你插入任何增加的東西。還有這個聲明叫重複... http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

+0

所以我的列a-TID是一個自動增量字段和一個主鍵。我只能指定一個主鍵,所以我想要做的就是在'tagid'字段中重複主鍵...我現在正在閱讀重複部分! – Simeon

+0

您不能重複主鍵。它是什麼使每行獨一無二和SQL不會接受它。如果你想要你可以創建一個不同的領域,並使其不是主鍵。然後你可以重複。也有稱爲集合函數的這些東西。可能會幫助你的是Max(),這將得到一些列的最大值。您可能會將其存儲在一個變量中,並將其用於查詢中。這裏是鏈接http://www.mysqltutorial.org/mysql-aggregate-functions.aspx –

0

你可以存儲以前的ID,然後使用它在你的查詢字符串中。

$previous_id = mysql_insert_id(); 

mysql_query("INSERT INTO `tags` (`tid`,`tagid`,`tagname`) VALUES('','$previous_id','{$tagname}')"); 
+0

有趣的想法。大多數情況下,這是一個單獨的查詢,所以我不一定要循環訪問並創建一個過去的id來捕獲...... mysql_insert_id是否總是與下一個自動增量值相同? :) – Simeon