2009-10-28 115 views
1

我正在做我的表使用php的mysql插入。 自動增量列名稱是「link_id」 和「別名」列用於使SEO友好的網址。獲取當前auto_increment值

在我插入期間,我想在我的別名列的末尾添加link_id值。

所以我需要知道什麼是被插入的link_id值。

我不想做另一個查詢。

mysql_insert_id()不起作用,因爲它使用以前的查詢,而不是當前的查詢。

感謝

回答

0

你可以使用mysql_insert_id()++,儘管這並不總是可靠的。

這將是更好的將是插入查詢,然後使用CONCAT()

+0

mysql_insert_id()++將無法工作,因爲mysql_insert_id()是連接具體。這是一個安全的假設,只有一個插入發生在這張表上。 – longneck 2009-10-28 17:33:00

3

您應該使用追加電流id SHOW TABLE STATUS

$query = mysql_query("SHOW TABLE STATUS LIKE tablename"); 
$row = mysql_fetch_array($query); 
$next_id = $row["Auto_increment"]; 

它會給你AUTO_INCREMENT列的當前狀態。

編輯:

在一個查詢中,你可以做這樣的:

INSERT INTO table_schema.table_name(column_name) 
VALUES (("SELECT AUTO_INCREMENT 
     FROM INFORMATION_SCHEMA.TABLES 
     WHERE TABLE_SCHEMA = 'table_schema' 
      AND TABLE_NAME = 'table_name'")) 

它會給你在列column_name新的AUTO_INCREMENT值。

+0

正如Dereleased指出的,您對$ next_id的假設很容易出現競爭狀況。 – melfar 2009-10-28 17:47:29

2

你考慮過trigger in MySQL嗎?就像:

DELIMITER // 
CREATE TRIGGER `add_alias_id` AFTER INSERT ON `someTable` 
    FOR EACH ROW BEGIN 
     UPDATE 
      `someTable` 
     SET 
      `alias` = CONCAT(`alias`,NEW.`link_id`) 
     WHERE 
      `link_id` = NEW.`link_id`; 
    END;  
// 
DELIMITER ; 

編輯:我最近工作的旗艦軟件曾用於假設max(id)+ 1 = next id的公司。問題是併發性;這很少見,但是兩個人可以得到相同的身份證,導致各種各樣的混亂。試圖預測價值時要非常小心。

2

我在SELECT端處理這種類型的場景。插入到表名(aliasroot)的值('index.php?link_id =');

這將使您例如

在我的選擇,我會做 '選擇CONCAT(aliasroot,link_id)從表名別名'

+0

這是IMO的最佳方式。雖然我會在PHP端進行連接,但請保持mysql不那麼繁忙。 – melfar 2009-10-28 18:10:50

+0

我更喜歡這種解決方案,因爲您不需要複製數據並將格式設置用於數據庫外的演示文稿使用。 – Kwebble 2009-10-28 22:34:09