gpt4 book ai didi

mysql - 我如何操作 SQL 中的 VARCHAR 字段以简化从 Bugzilla 到 Redmine 迁移中的路线图集合?

转载 作者:行者123 更新时间:2023-11-29 00:42:51 24 4
gpt4 key购买 nike

根据 an earlier question ,我正在从 Bugzilla 迁移到 Redmine,在此过程中,我想利用 Redmine 提供的路线图。

在 bugzilla 中,错误总是针对导致问题出现的软件版本进行记录,虽然我现在将此信息保存在自定义字段中(请参阅上面提到的早期问题),但我现在需要减少路线图简化为更易于管理的内容,即:

  1. 将所有已关闭的错误版本更改为符合路线图的简化等效版本(例如,0.1234 变为 0.1,2.9876 变为 2.9)。这允许任何一个路线图版本有多达 999 个子版本,这是我们已经倾向于使用 Bugzilla 做的事情。
  2. 将所有打开的错误更改为新的“计划外”版本。
  3. 删除所有当前未使用的版本号

我想这可以通过以下步骤实现:

  1. 获取所有可用的当前版本
  2. 对于检索到的每个版本,去除除前三个字符以外的所有字符
  3. 检查该产品的版本号是否已经存在。
  4. 如果版本号是新的,则将其添加为新版本。
  5. 遍历数据库中的每个问题,并且 (a) 如果问题已关闭,则将其分配给缩短的版本号,或者 (b) 如果问题仍未解决,则将其分配给“计划外”版本。

...但是,遗憾的是,我对 SQL 知识的缺乏让我很失望。有谁知道如何解决这个问题?

最佳答案

此查询按项目获取所有现有版本的所有 3 个字符的版本名称:

SELECT DISTINCT v.project_id, Left(v.name, 3) newversionname
FROM issues i
INNER JOIN versions v ON i.fixed_version_id=v.id

您需要一个包含所有尚不存在的 3 字符版本名称的列表:

SELECT f.project_id, f.newversionname
FROM (
SELECT DISTINCT v.project_id, Left(v.name, 3) newversionname
FROM issues i INNER JOIN versions v ON i.fixed_version_id=v.id
) f
LEFT OUTER JOIN versions v2 ON f.project_id = v2.project_id and f.newversionname=v2.name
WHERE v2.project_id is null

您需要为上述查询的每个结果插入新版本(我会将上述查询的改编作为 INSERT 查询留给您...)。


编辑:更新查询以添加版本详细信息

SELECT f.project_id, f.newversionname, v3.description, v3.created_on, v3.updated_on
FROM (
SELECT v.project_id, Left(v.name, 3) newversionname, MIN(v.id) minversionid
FROM issues i INNER JOIN versions v ON i.fixed_version_id=v.id
GROUP BY v.project_id
) f
LEFT OUTER JOIN versions v2 ON f.project_id = v2.project_id and f.newversionname=v2.name
INNER JOIN versions v3 ON f.minversionid=v3.id
WHERE v2.project_id is null

这将为每个新版本简单地选择具有最低 ID 的版本的详细信息。


注意:如果您的版本大于 9(即 11.234 变为 11.),这将中断。

现在,对于与旧版本相关的每个问题,都有一个新的 3 字符版本。以下查询显示了哪一个:

SELECT DISTINCT i.id, v.id oldversionid, v.name oldversionname, v2.id newversionid, v2.name newversionname
FROM issues i
INNER JOIN versions v ON i.fixed_version_id=v.id
INNER JOIN versions v2 ON LEFT(v.name, 3) = v2.name and v.project_id = v2.project_id
WHERE v.id <> v2.id

您可以使用此查询并在完整性检查后将其调整为 UPDATE 查询。您仍然需要添加条件来区分打开和关闭的问题 (status_id)。

希望这对您的迁移有所帮助,祝您使用 redmine 愉快!

关于mysql - 我如何操作 SQL 中的 VARCHAR 字段以简化从 Bugzilla 到 Redmine 迁移中的路线图集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11514305/

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