2012-07-25 40 views
1

我有一個表格,它有一個數字標識一組值。每次將數組值加載到數據庫中時,此數字都會遞增,因此此數字將在給定時間插入的每個值重複。如何將所有由相同查詢插入的記錄彙集在一起​​?

如何獲取此數字並添加1,以便我可以使用表單來輸入新的值與PHP?

如果有更好的方法來做到這一點,我將不勝感激。

謝謝

+0

你只是在尋找一個自動遞增列?或者,該值是否在多行中重複並按事務插入而不是每個記錄增加? – David 2012-07-25 20:43:21

+1

發表您的表架構和一些示例數據 – 2012-07-25 20:45:27

+0

要擴展Dagon的評論,請閱讀[「需要解答?實際上,不......您需要一個問題」](http://weblogs.sqlteam.com/jeffs/archive /2008/05/13/question-needed-not-answer.aspx)和[「寫出完美的問題」](http://tinyurl.com/so-hints)。 – outis 2012-07-25 22:09:07

回答

-2

你可能想看看MySQL的自動增量功能。

http://www.w3schools.com/sql/sql_autoincrement.asp

這將允許您識別一個ID字段,將每次自動遞增,因此進入了一個新的記錄,而無需指定的值。

+7

請不要鏈接到該網站:http://w3fools.com/ – 2012-07-25 20:44:53

1

按遞增列降序排列表,並將結果限制爲僅第一行。這將是最高的價值。

SELECT incrementing_column 
FROM table 
ORDER BY incrementing_column DESC 
LIMIT 1 
+0

謝謝你這正是我的意思。順便說一句,我知道規範化,通過記憶不是確保列不包含重複值的步驟之一嗎?如果你不能用相同的值標註它們,你如何通過一個值將一組主題引用到另一個表中? – user1337603 2012-07-25 20:52:53

+1

考慮如果兩個用戶同時進行此操作會發生什麼情況;這裏沒有任何東西阻止他們獲得相同的返回值。 – spencer7593 2012-07-25 20:59:40

1

您需要考慮併發問題。例如,如果有兩個用戶每個都向表中添加一個「新」數字數組,則可能不希望他們使用相同的序號。所以你需要進行某種「原子」操作,以防止它們返回相同的序列號。

(我要在這裏假設一個整數值是「序列」號可以接受的,在沒有任何跡象顯示在你的問題,它不是。)

一種方法是定義一個表

CREATE TABLE seq (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY); 

然後,爲了得到一個「新」的ID號碼,您只需執行INSERT到表,並檢索:只是在它這個「序列」號,定義爲AUTO_INCREMENT,這樣的事情列自動生成的id值。你的SQL語句可能會是這個樣子:

INSERT INTO seq (id) VALUES (NULL); 
SELECT LAST_INSERT_ID() AS id; 

還有其他的(容易)的方式來檢索LAST_INSERT_ID的價值,但具體的方法取決於你使用的mysqli(mysqli_insert_id)或PDO(lastInsertId)。

這種方法是最接近我已經得到(在MySQL中)爲Oracle風格的SEQUENCE對象。

還有其它的方法,但也有一些從根本上打破(因爲他們將可能返回重複的值),以及一些對併發性產生負面影響(因爲他們鎖定表以防止併發檢索和/或更新。)

相關問題