2012-07-16 60 views
2

我正在將bugzilla安裝遷移到redmine。如何從bugzilla將版本遷移到redmine中新的自定義「源版本」字段(我需要哪種SQL語法)?

在bugzilla錯誤總是記錄對軟件的版本,導致問題被提出。

由於redmine支持路線圖,我想做一些遷移的事情。我想要做的第一部分是將所有當前版本設置移至新的自定義「源版本」字段。

我已經嘗試製作一個名爲'源版本'的新自定義字段,並手動更改幾個錯誤報告以使用該字段。一些有限的測試表明,爲該字段指定的每個值都會在custom_values表中獲得新條目。下面顯示了三個錯誤和兩個那些具有1.2060相同的定製版本值:

-------------- 
SELECT * FROM custom_values WHERE custom_field_id=4 
-------------- 

+------+-----------------+---------------+-----------------+--------+ 
| id | customized_type | customized_id | custom_field_id | value | 
+------+-----------------+---------------+-----------------+--------+ 
| 4821 | Issue   |   765 |    4 | 1.1098 | 
| 4822 | Issue   |   802 |    4 | 1.2060 | 
| 4823 | Issue   |   801 |    4 | 1.2060 | 
+------+-----------------+---------------+-----------------+--------+ 

...其中custom_field_id涉及到我加入了新的「源版本」字段。

所以我想填充表我需要爲每個問題創建一個新的條目,我需要從當前版本複製。

如果有幫助,版本表具有以下結構:

-------------- 
SHOW COLUMNS FROM versions 
-------------- 

+-----------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+-----------------+--------------+------+-----+---------+----------------+ 
| id    | int(11)  | NO | PRI | NULL | auto_increment | 
| project_id  | int(11)  | NO | MUL | 0  |    | 
| name   | varchar(255) | NO |  |   |    | 
| description  | varchar(255) | YES |  |   |    | 
| effective_date | date   | YES |  | NULL |    | 
| created_on  | datetime  | YES |  | NULL |    | 
| updated_on  | datetime  | YES |  | NULL |    | 
| wiki_page_title | varchar(255) | YES |  | NULL |    | 
| status   | varchar(255) | YES |  | open |    | 
| sharing   | varchar(255) | NO | MUL | none |    | 
+-----------------+--------------+------+-----+---------+----------------+ 

...和問題表的結構如下:

-------------- 
SHOW COLUMNS FROM issues 
-------------- 

+------------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+------------------+--------------+------+-----+---------+----------------+ 
| id    | int(11)  | NO | PRI | NULL | auto_increment | 
| tracker_id  | int(11)  | NO | MUL | 0  |    | 
| project_id  | int(11)  | NO | MUL | 0  |    | 
| subject   | varchar(255) | NO |  |   |    | 
| description  | text   | YES |  | NULL |    | 
| due_date   | date   | YES |  | NULL |    | 
| category_id  | int(11)  | YES | MUL | NULL |    | 
| status_id  | int(11)  | NO | MUL | 0  |    | 
| assigned_to_id | int(11)  | YES | MUL | NULL |    | 
| priority_id  | int(11)  | NO | MUL | 0  |    | 
| fixed_version_id | int(11)  | YES | MUL | NULL |    | 
| author_id  | int(11)  | NO | MUL | 0  |    | 
| lock_version  | int(11)  | NO |  | 0  |    | 
| created_on  | datetime  | YES | MUL | NULL |    | 
| updated_on  | datetime  | YES |  | NULL |    | 
| start_date  | date   | YES |  | NULL |    | 
| done_ratio  | int(11)  | NO |  | 0  |    | 
| estimated_hours | float  | YES |  | NULL |    | 
| parent_id  | int(11)  | YES |  | NULL |    | 
| root_id   | int(11)  | YES | MUL | NULL |    | 
| lft    | int(11)  | YES |  | NULL |    | 
| rgt    | int(11)  | YES |  | NULL |    | 
| is_private  | tinyint(1) | NO |  | 0  |    | 
+------------------+--------------+------+-----+---------+----------------+ 

的問題是,什麼神奇的SQL查詢是否需要將版本複製到新字段並清理?我從來不是一個SQL高手,所以任何幫助將感激地收到!

編輯 - 我試過如下:

INSERT INTO custom_values 
(Issue, issues.id, 4, versions.name) 
SELECT * FROM issues INNER JOIN versions ON issues.fixed_version_id=versions.id; 

...但它給我一個錯誤:

-------------- 
INSERT INTO custom_values (Issue, issues.id, 4, versions.name) SELECT * FROM issues INNER JOIN versions ON issues.fixed_version_id=versions.id 
-------------- 

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '4, versions.name) SELECT * FROM issues INNER JOIN versions ON issues.fixed_version_id=ve' at line 1 

回答

1

您的查詢

INSERT INTO custom_values 
(Issue, issues.id, 4, versions.name) 
SELECT * FROM issues INNER JOIN versions ON issues.fixed_version_id=versions.id; 

應修改這

INSERT INTO custom_values 
(customized_type, customized_id, custom_field_id, value) 
SELECT 'Issue', issues.id, 4, versions.name 
FROM issues INNER JOIN versions ON issues.fixed_version_id=versions.id; 

爲了成爲有效的SQL。

可是我最好備份數據庫反正... :-)

+0

+1:那工作一種享受,一旦我意識到領域是'fixed_version_id'不'fixed_id'。我更新了我的問題和答案,以反映正確的設置。 – 2012-07-16 22:50:30

+0

問題的下一部分是如何更改所有已關閉的錯誤以減少路線圖中列出的版本數量。 – 2012-07-16 22:51:59

相關問題