我有一個表格用於保存翻譯。它奠定了如下:將MySQL表格重新格式化爲網格
id | iso | token | content
-----------------------------------------------
1 | GB | test1 | Test translation 1 (English)
2 | GB | test2 | Test translation 2 (English)
3 | FR | test1 | Test translation 1 (French)
4 | FR | test2 | Test translation 2 (French)
// etc
對於翻譯管理工具與表一起去,我需要它輸出的東西更像是一個電子表格網格:
token | GB | FR | (other languages) -->
-------------------------------------------------------------------------------------------
test1 | Test translation 1 (English) | Test translation 1 (French) |
test2 | Test translation 1 (French) | Test translation 2 (French) |
(other tokens) | | |
| | | |
| | | |
V | | |
我想這將是很容易,但事實證明,這比我預料的要困難得多!
很多搜索後和周圍挖我發現GROUP_CONCAT,這對於具體情況上面我可以開始工作,併產生輸出我在尋找:
select
token,
group_concat(if (iso = 'FR', content, NULL)) as 'FR',
group_concat(if (iso = 'GB', content, NULL)) as 'GB'
from
translations
group by token;
然而,這是,當然,完全不靈活。它只適用於我迄今指定的兩種語言。當我添加一種新語言時,我必須手動更新查詢以將其考慮在內。
我需要上述查詢的通用版本,這將能夠生成正確的表輸出,而不必知道存儲在源表中的任何數據。
有些消息來源聲稱你不能在MySQL中輕鬆做到這一點,但我相信它一定是可能的。畢竟,這首先是數據庫存在的事情。
有沒有辦法做到這一點?如果是這樣,怎麼樣?
有沒有通用的查詢來實現你想要的。您必須爲每種語言手動添加「GROUP_CONCAT」或「JOIN」。 – 2012-04-26 12:14:13
或者只是在客戶端進行轉換... – 2012-04-26 12:14:38
實際上,我們已經將我們的翻譯系統從「網格」樣式系統轉移到更靈活的系統,如您正在從中移動。我們發現對錶格的手動更改比預期更規則。起初我們認爲更少的行會更好,但是這等於更多的工作,更多的工作作爲「網格」。我的建議是保持原樣,除非你有一個令人信服的理由來改變。 – Ryan 2012-04-26 18:09:59