有什麼方法可以訪問查詢中使用的自動增量的ID。在插入過程中訪問mysql插入的ID
例如Wordpress將插入的ID放在同一行的GUID中,有沒有什麼辦法可以訪問該行在插入過程中要使用的id。
或者也許有一些快速的方法讓我找出當前的AI計數器是什麼,所以我知道進入的是什麼?
我需要這個,因爲我正在嘗試將WP帖子表回填到我正在使用的新的自定義帖子類型中,並且我需要將插入的ID放在GUID列內。
有什麼方法可以訪問查詢中使用的自動增量的ID。在插入過程中訪問mysql插入的ID
例如Wordpress將插入的ID放在同一行的GUID中,有沒有什麼辦法可以訪問該行在插入過程中要使用的id。
或者也許有一些快速的方法讓我找出當前的AI計數器是什麼,所以我知道進入的是什麼?
我需要這個,因爲我正在嘗試將WP帖子表回填到我正在使用的新的自定義帖子類型中,並且我需要將插入的ID放在GUID列內。
我結束了纔開出的最後一個ID如下:
$this->lID = mysql_fetch_assoc(mysql_query("SELECT ID FROM wp_posts ORDER BY ID DESC LIMIT 1"));
$this->lID = $this->lID[ID];
我假設你想要某種具有與用戶ID相同值的列。 但是,你爲什麼要這樣做?只需使用用戶標識即使您將其用作參考標識。
也許mysql的LAST_INSERT_ID()函數可以幫到你。 http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
LAST_INSERT_ID()會返回當前插入行的ID嗎? – arnaud576875 2011-01-30 20:48:10
它不會。它將返回使用最後一個INSERT查詢插入的第一個ID。 – Mchl 2011-01-30 20:50:21
好吧。 LAST_INSERT_ID()+ 1給出了新的插入ID :) – 2011-01-30 21:05:21
AFAIK,你不能訪問行的AUTO_INCREMENT值插入。我建議插入行,然後讀取它的ID並更新它以填充需要知道ID的字段。
(爲什麼你需要,它似乎你的數據庫需要一些標準化,如果你有這樣的蛋雞問題?)
use mysql_insert_id() to get last inserted id
你可以看到更多的信息: http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html
這是做到這一點的一種方式。這對我有用:
1)只是執行2個單獨的MySql查詢。第一個將帖子值插入到wp_posts表中。您應該插入到除「guid」列之外的所有列中插入一些佔位符,例如「0」。
2)第二個查詢在第一個查詢之後執行,在這裏您可以調用LAST_INSERT_ID()函數來獲取上一個查詢的最後一個插入ID。第二個查詢使用正確的ID號更新「guid」字段。
例如,您可以將此插入到循環中,以便從csv文件批量插入WP帖子。
當網站脫機或首先鎖定表格時,您應該執行此操作,以避免其他查詢請求進入其他表單之間。
例子:第一個查詢(抱歉列格式,但它更容易調試):
mysql_query("INSERT INTO wp_posts(
ID,
post_author,
post_date,
post_date_gmt,
post_content,
post_title,
post_excerpt,
post_status,
comment_status,
ping_status,
post_password,
post_name,
to_ping,
pinged,
post_modified,
post_modified_gmt,
post_content_filtered,
post_parent,
guid,
menu_order,
post_type,
post_mime_type,
comment_count
) VALUES (
'null',
'1',
'$timestmp',
'$timestmp',
'$content',
'$posttitle',
'',
'publish',
'open',
'open',
'',
'$postname',
'',
'',
'$timestmp',
'$timestmp',
'',
'0',
'$uiai',
'0',
'post',
'',
'0'
)") or die(mysql_error());
第二查詢:
$uid = mysql_insert_id();
$uiai = 'http://yoursite.net/wordpress/?post_type=post&p='.$uid;
mysql_query("UPDATE wp_posts SET guid = '$uiai' WHERE ID = '$uid'");
...也是,當你通過循環許多插入,有時它可以最大限度地允許PHP腳本允許的最大執行時間,並且上傳被中斷。它有助於使用set_time_limit(0);在整個腳本中,最大允許時間計數器會定期重置。
...希望這有助於:)
也許你可以在INSERT ... SELECT
查詢中使用你的表AUTO_INCREMENT
價值information_schema.tables
。理論上INSERT ... SELECT
應該鎖定information_schema.tables
和AUTO_INCREMENT
值應該是用於下一個INSERT
的Id。但是你應該很難測試這個並考慮性能問題。
你能展示一個代碼示例嗎? – 2011-01-30 20:38:55
例如「INSERT INTO table(id,name,adress,auto_val)VALUES(null,'John','10 sycamore lane','MYSQL_AUTO_INCREMENT')」 – 2011-01-31 12:49:59