0

3列のテーブルがあります:label_value, language_value, language. これはラベルのテーブルで、ラベルの場所label_value = "name"、language_value - ラベルの翻訳、language - 使用している言語の ID です。したがって、英語 (language=45) と自分の言語 (language=24) の を抽出する必要がlabel_valueありlanguage_valueますlanguage_value。すべての英語のラベルが私の言語に翻訳されているわけではありませんが、すべての英語のラベルを抽出する必要があることに注意してください。ラベルに私の英語への翻訳がない場合は、このラベルをlanguage_value私の言語に NULL で返す必要があります。したがって、次のコードを作成しました。

SELECT e.label_value, e.language_value
FROM labels e, labels t
WHERE e.label_value=t.label_value AND e.language=45 AND t.language=24  

すべての英語のラベルが返されたわけではなく、一部のラベルが 2 回返されたわけではないため、完全で正しいクエリではないことを理解しています。編集してください。ありがとうございました。

更新しました:

また、ロケールのクエリが t.approved='1' または t.user_id=123 という条件を満たす必要があります。

4

1 に答える 1

0

a を使用しleft joinて、オプションのローカル言語の行を検索できます。

select  eng.label_value
,       coalesce(loc.language_value, eng.language_value)
from    labels eng
left join    
        labels loc
on      loc.language = 24
        and eng.label_value = loc.label_value
        and (loc.approved = '1' or loc.user_id = 123)
where   eng.language = 45             
        and (eng.approved = '1' or eng.user_id = 123)
于 2012-07-04T06:06:58.853 に答える