1

根据之前的问题,我正在从 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 知识让我失望了。有谁知道如何解决这个问题?

4

1 回答 1

1

此查询按项目为您获取所有现有版本的所有 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 的乐趣!

于 2012-07-17T08:22:41.167 回答