このクエリは、プロジェクトごとに、既存のすべてのバージョンの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を楽しんでください!