翻訳を保持するためのテーブルがあります。次のようにレイアウトされています。
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;
ただし、これはもちろん、まったく柔軟性がありません。これまでに指定した 2 つの言語でのみ機能します。新しい言語を追加するとすぐに、クエリを手動で更新して考慮に入れる必要があります。
ソース テーブルに格納されているデータについて何も知らなくても、正しいテーブル出力を生成できる、上記のクエリの一般化されたバージョンが必要です。
一部の情報源は、MySQL ではこれを簡単に実行できないと主張していますが、私はそれが可能であるに違いないと確信しています。結局のところ、これはそもそもデータベースが存在するようなものです。
これを行う方法はありますか?もしそうなら、どのように?