2011-01-30 64 views
7

有什麼方法可以訪問查詢中使用的自動增量的ID。在插入過程中訪問mysql插入的ID

例如Wordpress將插入的ID放在同一行的GUID中,有沒有什麼辦法可以訪問該行在插入過程中要使用的id。

或者也許有一些快速的方法讓我找出當前的AI計數器是什麼,所以我知道進入的是什麼?

我需要這個,因爲我正在嘗試將WP帖子表回填到我正在使用的新的自定義帖子類型中,並且我需要將插入的ID放在GUID列內。

+0

你能展示一個代碼示例嗎? – 2011-01-30 20:38:55

+0

例如「INSERT INTO table(id,name,adress,auto_val)VALUES(null,'John','10 sycamore lane','MYSQL_AUTO_INCREMENT')」 – 2011-01-31 12:49:59

回答

-3

我結束了纔開出的最後一個ID如下:

$this->lID = mysql_fetch_assoc(mysql_query("SELECT ID FROM wp_posts ORDER BY ID DESC LIMIT 1")); 
     $this->lID = $this->lID[ID]; 
0

我假設你想要某種具有與用戶ID相同值的列。 但是,你爲什麼要這樣做?只需使用用戶標識即使您將其用作參考標識。

0

AFAIK,你不能訪問行的AUTO_INCREMENT值插入。我建議插入行,然後讀取它的ID並更新它以填充需要知道ID的字段。

(爲什麼你需要,它似乎你的數據庫需要一些標準化,如果你有這樣的蛋雞問題?)

0

這是做到這一點的一種方式。這對我有用:

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);在整個腳本中,最大允許時間計數器會定期重置。

...希望這有助於:)

0

也許你可以在INSERT ... SELECT查詢中使用你的表AUTO_INCREMENT價值information_schema.tables。理論上INSERT ... SELECT應該鎖定information_schema.tablesAUTO_INCREMENT值應該是用於下一個INSERT的Id。但是你應該很難測試這個並考慮性能問題。