2011-05-10 105 views
2

對不起期間增加一列,讓我跟你解釋....的recordId自動遞增,是我的主鍵..... LISTINGID指的是在ID不同的表。在這個表1中,需要爲每個具有相同LISTINGID的記錄增加recordListingID。我的插入語句最多可插入10條記錄,它們具有相同的LISTINGID,我需要recordListingID以1開頭,依此類推。PHP的MySQL插入

我插入記錄到MySQL從PHP也可以是1條或更多的記錄,我需要的cols之一,第一個條目這裏是1遞增是我的插入代碼

mysql_query("INSERT INTO car_listing_images (recordID, recordText, recordListingID, LISTINGID) VALUES ('', '$fileName', '??', '$listingid')"); 

我在哪裏放?是需要增加的列。我怎樣才能做到這一點?

在此先感謝!

+0

使用'auto_increment' – 2011-05-10 10:44:30

+0

使用自動增量該字段..... – Pushpendra 2011-05-10 10:45:19

回答

2

您可以使用內置的MySQL的AUTO_INCREMENT功能

AUTO_INCREMENT 

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

的MySQL將增加1指定的字段(或什麼都間隔設置)

+0

這不是答案,他想要一個非主鍵增加 – ohmusama 2011-05-10 10:46:10

+0

那不適合我,因爲我想要的山坳遞增不保存唯一的數據。我已經這樣做了recordID – Peter 2011-05-10 10:46:22

+0

如果你不想要一個主鍵刪除主鍵Referance,那麼 - 這是我的錯誤。 – LiamB 2011-05-10 10:46:43

0

我不知道我是否真的瞭解你的問題。

如果你想增加每記錄一欄,它應該被定義爲AUTO_INCREMENT列。這樣一來,在你INSERT聲明如果插入NULL成列,它每次都會上去。

或者你可以做fieldname+1,但AUTO_INCREMENT總是首選。


按我的意見,你可以做這樣的事情:

$row = mysql_fetch_assoc(mysql_query("SELECT MAX(recordListingID) AS `max` FROM car_listing_images")); 
$next_id = $row['max'] + 1; 
mysql_query("INSERT INTO car_listing_images (recordID, recordText, recordListingID, LISTINGID) VALUES ('', '$fileName', '$next_id', '$listingid')"); 

我還是會認真地建議反對這一點,這是一個很大更好地落實到使用AUTO_INCREMENT場。


在你最後的評論後,我會建議如下。您將無法直接在MySQL中執行此操作(除非您使用變量,但如果您插入多個RecordID,則可能會出錯)。

$next_id = 0; 
foreach ($insert as $insert_stmt) { 
    $next_id++; 
    mysql_query("INSERT INTO car_listing_images (recordID, recordText, recordListingID, LISTINGID) VALUES ('', '$fileName', '$next_id', '$listingid')"); 
} 
+0

$ mylid = 0; (「','$ fileName','$ mylid + 1','$ listingid')」); – Peter 2011-05-10 10:50:49

+0

那樣?會工作? – Peter 2011-05-10 10:51:20

+0

不,對不起,您需要在查詢中執行此操作,並且我不確定在簡單的插入語句中是否真的有可能。插入時你可以有一個內部計數器,或者選擇MAX,查看我更新的答案(給我一分鐘)。 – 2011-05-10 10:57:48

0

改變你的表結構包括AUTO_INCREMENT屬性爲您recordListingID列,然後從插入省略列有一個遞增的數字它自動填充。

I.e:mysql_query(「INSERT INTO car_listing_images(recordID,recordText,LISTINGID)VALUES('','$ fileName','$ listingid')」);

0

您可以初始化變量爲1,使用post-increment operator

$value = 1; 
for(...){ 
    $sql = 'INSERT ...'; 
    $value++; 
} 
0

1前言:如果你需要有2場遞增的,但不依賴於各另外,你可能做錯了。最好不要使用recordListingID,而應使用recordID,因爲它們可能是相同的數字。

如果您的表格正在運行InnoDB您可以創建交易。那麼你可以嘗試這樣的事:

<?php 

mysql_query('START TRANSACTION'); 

$recordListingId = mysql_result(mysql_query("SELECT count(*)+1 as num FROM car_listing_images WHERE LISTINGID=$listingid"), 'num', 0); 

mysql_query("INSERT INTO car_listing_images (recordID, recordText, recordListingID, LISTINGID) VALUES ('', '$fileName', '$recordListingId', '$listingid')"); 

mysql_query('COMMIT'); 
?> 

如果沒有InnoDB的,請嘗試使用stored procedure

+0

確定recordID已自動遞增,對於每個recordID recordListingID可以具有1到10的值。許多recordID可以具有這些recordListingID – Peter 2011-05-10 10:57:33

+0

好吧,我在第一個sql查詢中加了一個''WHERE LISTINGID = $ listingid「'。這應該在您添加10個項目的循環中進行。每次添加具有相同'LISTINGID'的項目時,它都會增加'$ recordListingId'。這也將允許您稍後再回來並添加具有相同'LISTINGID'的記錄,而不必跟蹤這些值。 – ohmusama 2011-05-10 19:05:22

0

我想我知道你是/正在努力完成。可能有更好的辦法,但我做的是「從表中選擇max(id)+1作爲nextId」,並將其存儲在我稱爲「recordListingID」的輔助ID字段中使用的變量中。

這種方式您插入的第一行將具有相同的id和recordListingID,但每隔一行將auto_inc該id,但recordListingID將與第一行相同。

在我的情況下,一次只有一個用戶這樣做,所以不會有錯誤的機會,但在多用戶的情況下,您可能想要修改這個以防止人們在同時。就像可能標記最後一行,以便您的查詢知道它已完成,因此您可以像「select max(id)+1 as lastId from lastRow = 1」或類似的東西。