我有一個表格,它有一個數字標識一組值。每次將數組值加載到數據庫中時,此數字都會遞增,因此此數字將在給定時間插入的每個值重複。如何將所有由相同查詢插入的記錄彙集在一起?
如何獲取此數字並添加1,以便我可以使用表單來輸入新的值與PHP?
如果有更好的方法來做到這一點,我將不勝感激。
謝謝
我有一個表格,它有一個數字標識一組值。每次將數組值加載到數據庫中時,此數字都會遞增,因此此數字將在給定時間插入的每個值重複。如何將所有由相同查詢插入的記錄彙集在一起?
如何獲取此數字並添加1,以便我可以使用表單來輸入新的值與PHP?
如果有更好的方法來做到這一點,我將不勝感激。
謝謝
你可能想看看MySQL的自動增量功能。
http://www.w3schools.com/sql/sql_autoincrement.asp
這將允許您識別一個ID字段,將每次自動遞增,因此進入了一個新的記錄,而無需指定的值。
請不要鏈接到該網站:http://w3fools.com/ – 2012-07-25 20:44:53
按遞增列降序排列表,並將結果限制爲僅第一行。這將是最高的價值。
SELECT incrementing_column
FROM table
ORDER BY incrementing_column DESC
LIMIT 1
謝謝你這正是我的意思。順便說一句,我知道規範化,通過記憶不是確保列不包含重複值的步驟之一嗎?如果你不能用相同的值標註它們,你如何通過一個值將一組主題引用到另一個表中? – user1337603 2012-07-25 20:52:53
考慮如果兩個用戶同時進行此操作會發生什麼情況;這裏沒有任何東西阻止他們獲得相同的返回值。 – spencer7593 2012-07-25 20:59:40
您需要考慮併發問題。例如,如果有兩個用戶每個都向表中添加一個「新」數字數組,則可能不希望他們使用相同的序號。所以你需要進行某種「原子」操作,以防止它們返回相同的序列號。
(我要在這裏假設一個整數值是「序列」號可以接受的,在沒有任何跡象顯示在你的問題,它不是。)
一種方法是定義一個表
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對象。
還有其它的方法,但也有一些從根本上打破(因爲他們將可能返回重複的值),以及一些對併發性產生負面影響(因爲他們鎖定表以防止併發檢索和/或更新。)
你只是在尋找一個自動遞增列?或者,該值是否在多行中重複並按事務插入而不是每個記錄增加? – David 2012-07-25 20:43:21
發表您的表架構和一些示例數據 – 2012-07-25 20:45:27
要擴展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