2011-09-26 77 views
1

我有一個表格key_id, id, text, lang如果在另一種語言中爲空,請選擇一種語言的值

我需要的語言(例如,DE)表中檢索所有的文本字段(因此沒有限制),但如果該語言的字段爲空,我需要用英文進行檢索。

例子:

key_id, id text  lang 
1  1 hi   en 
2  1 Guten Tag de 
3  2 nothing en 
4  2 ''   de 

我需要的結果,語言DE搜索:

Guten
什麼
- >這是因爲在德語它是空的......

我該怎麼辦?

+0

爲什麼你不只是檢索所有的語言,並選擇你想要的任何你的程序邏輯? – m0skit0

+0

你能說得更具描述性嗎? –

回答

1

你的問題犯規使表結構完全清楚,所以這是很難編寫SQL你。不過,我認爲你想要做的是選擇單詞的默認(en)值和AND當前(de)版本。提供選定的價值是一件簡單的事情。

select ifnull(de.text, en.text) 
from 
    words de 
    join words en on 
    en.id = de.id and 
    en.lang = 'en' 

where de.lang = 'de' 
0

您可以使用MySQL的非標準組按不聚集功能,這不是通過分組,它選擇第一排爲組在每個值。內部查詢首先對數據進行排序,以便按照每個id的語言首選項對行進行排序。

select * from (
    select id, text, lang 
    from lang_table 
    order by id, field(lang, 'de', 'en') -- this provides the custom ordering preference. you can add more languages as you like 
) x 
group by id; -- this captures the first (preferred language) row for each id 
0

第一我將不得不爲翻譯單獨的表等

[T] ID文本

[t_translation] ID語言文本

選擇聚結(t_translation.text,t.text)如在t translated_text 左加入t_translation上t.id = t_translation.id其中language =「德」 這種方式,您有回退是否有與「德」的語言 沒有記錄(查詢不完整,但你明白了)

相關問題