我有一张桌子用来存放翻译。它的布局如下:
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 中轻松地做到这一点,但我相信它一定是可能的。毕竟,这是数据库首先存在的那种东西。
有没有办法做到这一点?如果是这样,怎么做?