2012-07-09 57 views
0

我的標題可能有點偏離,但我不確定如何解釋它。在MySQL中刪除刪除時的唯一ID

我目前正在研究一個照片組合,用戶可以從 上傳圖片。完成後,會發生以下情況:

圖像通過HTML形式 - > PHP上傳。 一個SQL記錄創建持以下資料:

ID (Autoincrement) - Image title - Image Desc - Filepath 

用戶還能夠通過在Web界面另一個頁面來管理自己上傳。 發生這種情況時,SQL記錄與文件一起被刪除。但是,當 用戶然後添加一個新文件時,將使用下一個ID號,從而使數據庫留下一個空的空間,其中被刪除的記錄曾經是。

經過一番Google搜索後,我明白這是因爲自動增量不能用於顯示給用戶的ID,而是用於其他目的。然而,因爲我ftmb使用這些信息在圖像查看器中顯示照片編號,我想要一個更合適的方法。我需要的實質上是一個包含ints的MySQL列,它將填補刪除記錄時創建的空白。例如:

1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 

當刪除記錄5,我需要的ID,以填充間隙所以我代替

1 - 2 - 3 - 4 - - 6 - 7 - 8 

獲取 1 - 2 - 3 - 4 - 5 - 6 - 7

有什麼建議嗎?

感謝您的幫助。 :-)

+2

這聽起來像一個*顯示問題*,與數據庫真的沒什麼關係。你能不能簡單地在輸出圖像時對圖像進行編號,而不管它們在數據庫中的ID如何? – deceze 2012-07-09 12:41:05

回答

2

MySQL沒有一個好的工具來自動做到這一點,但你可以像做手工:

SELECT sequence_number FROM photo WHERE photo_id = 729; -- This would be 5. 
DELETE FROM photo WHERE photo_id=729; 
UPDATE photo SET sequence_number = sequence_number - 1 WHERE sequence_number > 5; 

UPDATE查詢可以包括任何其他的條件(例如,匹配album_id)將描述其數目意味着連續的圖片集。

但是,話雖如此,如果你只是總是向用戶顯示一個序列號,爲什麼它需要存儲在數據庫中呢?當您的PHP代碼迭代結果時,只需在其中添加數字即可。

$sequence_number = 1; 
while ($row = mysql_fetch_assoc($results)) { 
    // ... Display everything ... 
    $sequence_number++; 
} 
+0

如果我理解正確,那是正確的方法。(確保你有'idvariable'的地方使用參數化查詢,或者至少使用'mysql_real_escape_string'來確保你沒有直接向查詢中注入'_ _GET'參數。)我使用的'729'和當然,'5'在任何情況下都必然是變量,因爲你顯然不會每次都刪除同一張照片。 – VoteyDisciple 2012-07-09 13:07:17

0

嘗試:

SET @count = 0; 
UPDATE `<table>` SET `<table>`.`<column>` = @count:= @count + 1; 

上面將循環查詢和辦理的每一行,並用連續的整數更新<column>領域。

這應該回答你的問題,但我的理解你的問題與圖像查看器可能是完全不同的東西,並不涉及到自動增量問題。

+1

這將修改實際的'PRIMARY KEY' /'AUTO_INCREMENT',這是非常不鼓勵的。這裏的問題是如何修改專門用於此目的的單獨列。 – VoteyDisciple 2012-07-09 12:46:08

+0

正如我所描述的:這正是我試圖避免的,以及任何ALTER建議。不過謝謝你的建議! – 2012-07-09 13:04:59