gpt4 book ai didi

MySQL Insert 具有类似于 Window 默认文件命名的功能

转载 作者:行者123 更新时间:2023-11-29 11:28:47 25 4
gpt4 key购买 nike

我有一个带有名称列的表。最初,名称没有添加到表中,但我想在插入新行时添加默认名称,就像创建新文件时窗口的功能一样。我正在尝试找出如何查询序列中的下一个数字。

例如,如果我的表格如下所示:

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)

下一个插入行的名称应为“新名称 (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但我不知道如何在 FROMWHERE 中使用上面的代码。

我还尝试通过使用 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:=@rownum + 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;

但这似乎也不太正确。

最佳答案

如果您想要给定名称的下一个名称,我希望查询如下所示:

select (case when count(*) = 0 then $name
else concat($name, '(',
max(substring_index(name, ' (', -1) + 0) + 1,
')')
end)
from num_data
where name rlike concat($name, ' [(][0-9]+[)]' or
name = $name;

Here是一个 SQL Fiddle 演示它。

这假设正在测试的名称是由名为 $name 的参数提供的。

注意:上述查询生成新名称。如何按顺序获取下一个数字应该是显而易见的。

关于MySQL Insert 具有类似于 Window 默认文件命名的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37763482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com