私はbelowsのように3つのテーブル持っているフィルタとは、リンク内のレコードとレコードを持っていない取得するためにテーブルを照会する方法:そのを翻訳特定の言語のために利用できるがある場合、私はテーブルをtranslation_tokenいるレコードは、同様
translation_token ----------------- id token default_value -- ------ ------------- 1 token_1 Token 1 2 token_2 Token 2 3 token_3 Token 3 translation_token_value ----------------------- id token_id language_id value -- -------- ----------- ----- 1 1 1 Token 1 english 2 1 2 Token 1 dutch 3 2 1 Token 2 english application_module ------------------ id name -- ---- 1 project 2 location LI_translation_token_application_module --------------------------------------- id token_id application_module_id -- -------- --------------------- 1 1 1 2 2 2
をエントリはtranslation_token_valueテーブルに存在します。そうでない場合は、default_translationがトークンに対してフェッチされ、nullではありません。
また、これらのトークンは、特定のモジュール用であるか、すべてのモジュール用です。これらのトークンがモジュール用である場合、LI_translation_token_application_moduleテーブルにリンクが存在します。そうでない場合、エントリは存在しません。
レコードを取得する際には、常にモジュールと言語IDをフィルタに使用するため、特定のモジュールと言語の翻訳とその一般的な翻訳、つまりすべてのモジュールに適用できるトークンを取得します。
これまでのところ、私は以下の質問を試みましたが、成功しませんでした。私はtranslation_token_valueに翻訳がないトークンを取得していないので、そのようなトークンのdefault_translationが表示されます。左にある
SELECT translation_token.token, ttv.value,
CASE WHEN ttv.value = NULL THEN translation_token.default_translation
ELSE ttv.value
END
FROM translation_token
LEFT OUTER JOIN translation_token_value AS ttv ON ttv.token_id = translation_token.id
LEFT OUTER JOIN LI_translation_token_application_module AS token_app_mod ON token_app_mod.token_id = ttv.token_id
LEFT JOIN application_module
ON application_module.id = token_app_mod.application_module_id
WHERE (application_module.name IN('project') OR application_module.name IS NULL)
AND (language_id = 2 OR language_id is null)
以下のようにあなたもttv.valueがNULL' – Alex
I'vされたときに ''にWHEN ttv.value = NULL'を変更する必要が私のミスを見つけるためのクエリのおかげ@Alex –
@EidMorsyの感謝を編集しました。しかしこれは、LIテーブルに存在しないトークンをフェッチするための問題を解決するだけです。任意の言語のtranslation_token_valueテーブルにトークンのレコードが存在しない場合でも、このクエリは機能しません。 – Kammy