我有一個名稱列的表。最初名稱不會添加到表中,但我希望在插入新行時添加默認名稱,這與創建新文件時窗口的功能非常相似。我試圖弄清楚如何查詢序列中假設的下一個數字。MySQL插入功能類似於Window的默認文件命名
例如,如果我的表看起來像這樣:
id | name
==========
1 | New Name (1)
2 | real name
3 | New Name
下一個插入的行的名稱應該是「新的名稱(2)」。如果我的表看起來像這樣:
id | name
==========
1 | New Name (2)
2 | real name
或本:
id | name
==========
1 | another name
2 | real name
下一個插入的行的名稱應該是「新名」。如果我的表如下所示:
id | name
==========
1 | New Name (2)
2 | real name
3 | New Name
4 | New Name (3)
下一個插入的行的名稱應該是「New Name(1)」。到目前爲止我能創建查詢,以獲得現有的數字(「新名稱」 = 0)
SELECT SUBSTRING_INDEX(SUBSTR(d.name,INSTR(d.name,'(') + 1), ')', 1)
FROM data d
WHERE d.widget_name REGEXP '^New[[:space:]]Name[[:space:]]\\([[:digit:]]\\)$'
UNION
SELECT 0
FROM data d
WHERE d.name REGEXP '^New[[:space:]]Name$'
現在我需要一種方法來轉數的清單提交給一個數字將顯示最新的下一個默認名稱枚舉。我試過使用NOT EXISTS
from this question但我不知道如何使用FROM
和WHERE
上面的代碼。
我也嘗試通過使用a_horse_with_no_name's answer in this question創建row_num功能來做到這一點。假設num_data是查詢的結果(試圖保持它的清潔)表和它的列名是name_num:
SELECT IFNULL(row_number, (SELECT IFNULL(MAX(name_num),0)
FROM num_data))
FROM (SELECT @rownum:[email protected] + 1 AS row_number, t.*
FROM (num_data) t,
(SELECT @rownum := 0) r) gap_table
WHERE gap_table.row_number <> gap_table.widget_num
ORDER by row_number
LIMIT 1;
但是,這似乎並沒有得到它的權利了。
嗯東西似乎缺少,我試着查詢玩耍,where子句沒有工作,所以我用我的做法。它缺少一個例子,當你沒有一個沒有數字的$ name的時候會發生什麼,這個數字可以通過在max(名字REGEXP $ name = 0)和$ name'上加上這個來修正。但似乎由於'max',查詢沒有填補空白。 –
@KostyaSydoruk。 。 。應該現在工作。 –
@GorodonLinoff幾乎,它沒有填補空白,它沒有處理沒有$ name的情況,而已經有$ name(1)等等。我修改了你的查詢來支持它。 –