2012-06-21 18 views
0

您好,我的問題是如何獲取未在特定數據庫行中使用的第一個數字。該數字必須介於1和9999之間,並且必須與該特定數據庫行中的所有數字進行比較,因此如果數據庫行中的數據以5開頭,我將無法獲得未使用的第一個數字... in這種情況下數字1.然後,當我創建數字1 ..我需要得到的下一個數字是2和...我用它來創建配置文件,這個數字是配置文件號碼,ewery新配置文件數據庫中必須有第一個未使用的數字。怎麼做。我不知道從哪裏開始。那麼如果有人能把我解決這個問題的正確途徑?謝謝。如何從數據庫中未使用的1中獲得一個數字

編輯

但是,我不需要自動遞增我需要用戶能夠選擇對自己的這個數字,第一,這個第一號必須蜜蜂在文本形式placeing它建議用戶。如果用戶選擇數據庫中的數字,我的程序讓用戶知道他正在嘗試選擇allredy的數字。所以如果你瞭解我......我知道mysql的基礎知識。問題出現在用戶刪除一個配置文件時,那麼刪除的號碼不能被使用。爲此,我需要functio第一個免費的未使用的數字。

新編輯

I'l嘗試澄清一些細節...... FRST這是對人力資源的程序和用戶創建工人dosies ...當用戶創建新的dosie熙需求爲這個工人選擇dosie號碼,現在我需要向用戶提供第一個未使用的號碼用於新的dosie ... dosie號碼不是dosie'id'。 Dosie號碼必須由用戶手動選擇,或者他可以讓第一個空閒號碼給予新的dosie ...我認爲這個whill清除了一些東西

+0

我真的不得到什麼你正在努力。但你有什麼嘗試? – Bono

+2

你能舉個例子嗎? – Pete

回答

4

您可能正在談論自動遞增錶行的主鍵。只需插入數據,而不指定此「數字」,數據庫將自動將其設置爲適當的(下一個空閒)值。

不要重複使用主鍵(例如,你有1,2,3,4,5,但刪除3 - 如果你重用3,你將不會知道在任何未來的點3是其他一些實際刪除的記錄) 。

這,順便說一句,是非常基本的數據庫知識。閱讀關於MySQL或任何其他SQL關係數據庫的介紹教程。

+0

也讀了關於SEQUENCES – Randy

+0

現在我已經讀了幾次這個問題,我認爲這是答案:) – Pete

+0

@Veseliq但我不需要自動增量我需要用戶可以選擇這個數字,首先這第一個必須向用戶建議號碼。我如果用戶選擇數據庫中的數字,我的程序讓用戶知道他正試圖選擇存在的數字。所以如果你瞭解我......我知道mysql的基礎知識。 – Intex

0

首先創建值1到9999的表然後,一旦運行該查詢:

delete from table where id IN (select id from profiles) 

這樣,你不在的ID配置文件表。第一個可以顯示給用戶。在保存記錄時,請確保從該表中刪除該ID。

如果我正確地理解了你,這就是你要找的。

+0

看起來你近了試圖清除一些細節...首先這是人力資源計劃,用戶輸入工人的劑量與工人信息...當用戶是創建新的dosie hee需要爲該工作者選擇dosie編號,現在我不會爲用戶提供第一個未使用的編號用於新dosie ... dosie編號不是dosie'id'。 Dosie號碼必須由用戶手動選擇或他可以讓第一個免費號碼給予新dosie ...我認爲這個whill清除一些事情 – Intex

+0

行。那麼問題是什麼?創建一個只有ID從1到9999的表dosie,並按照我說的去做。如果所有使用的行都被刪除,那麼您的表格中有未使用的劑量。 (順便問一下,什麼是dosie?):( –

+0

你將如何處理多個用戶?如果兩個人同時訪問應用程序,他們都會得到相同的ID(Dosie編號)。是不是會產生問題? –

0

如果您是通過9999限於使用值1,我可能會設置過程如下:

  1. 添加另一個表,兩列(id_tracker)。
  2. 填充id_tracker id爲1到9999,默認爲0。
  3. 更新id_tracker.is_used爲1根據your table的內容。
  4. 添加刪除,插入觸發器到your table以更新id_tracker作爲必需品。
  5. 而選擇空的ID如下SELECT id FROM id_tracker WHERE is_used = 0 ORDER BY id LIMIT 1

下面是一些SQL讓你開始:

create table id_tracker 
(id int not null, is_used tinyint default 0, primary key (id)); 

delimiter | 

CREATE TRIGGER your_table_delete_trigger BEFORE DELETE ON your_table 
    FOR EACH ROW 
    BEGIN 
     UPDATE id_tracker SET is_used = 0 WHERE id = OLD.your_table_id; 
    END; 
| 

CREATE TRIGGER your_table_insert_trigger AFTER INSERT ON your_table 
    FOR EACH ROW 
    BEGIN 
     UPDATE id_tracker SET is_used = 1 WHERE id = NEW.your_table_id; 
    END; 
| 

delimiter ; 

**注:以上是MySQL

相關問題