1

以前の質問のとおり、私はBugzillaからRedmineに移行しています。その際、Redmineが提供するロードマップを利用したいと思います。

bugzillaでは、バグは常に問題が発生する原因となったソフトウェアのバージョンに対してログに記録され、この情報をカスタムフィールドに保存しましたが(上記の前述の質問を参照)、ロードマップを次のように減らす必要があります。より管理しやすいもの、すなわち:

  1. ロードマップに適合する単純化された同等のものに近いすべてのバグのバージョンを変更します(たとえば、0.1234は0.1になり、2.9876は2.9になります)。これにより、1つのロードマップバージョンに最大999のサブバージョンを含めることができます。これは、Bugzillaですでに行っていたものです。
  2. 新しい「計画外」バージョンに開かれているすべてのバグを変更します。
  3. 現在使用されていないバージョン番号をすべて削除します

これは次の手順で達成できると思います。

  1. 現在のすべてのバージョンを利用可能にする
  2. 取得したバージョンごとに、最初の3文字を除くすべての文字を削除します
  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 に答える