2011-09-26 4 views
1

key_id, id, text, lang이라는 테이블이 있습니다.다른 언어가 비어있는 경우 언어의 값을 선택하십시오.

언어 (예 : DE)의 표에서 모든 텍스트 필드를 제한없이 검색해야하지만이 언어가 비어 있으면 영어로 검색해야합니다.

예 :

나는 언어 DE로 검색하지, 결과가 필요
key_id, id text  lang 
1  1 hi   en 
2  1 Guten Tag de 
3  2 nothing en 
4  2 ''   de 

:

구텐
에게 아무것도
-> 독일어에 비어 있기 때문에 이것은 ...

어떻게하면됩니까?

+0

모든 언어를 검색하고 프로그램 논리에서 원하는 것을 선택하지 않는 이유는 무엇입니까? – m0skit0

+0

좀 더 구체적으로 설명해 주실 수 있습니까? –

답변

1

당신의 질문은 테이블 구조를 완전히 지우지 않으므로 Sql을 작성하기가 어렵습니다. 그러나, 나는 당신이하고 싶은 것이 단어의 기본 (en) 값과 현재 (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) translated_text로 왼쪽부터 t_type = t_translation.id where language = 'de' 'de'언어 이없는 레코드가없는 경우이 방법으로 대체합니다. 완료되지는 않았지만 아이디어를 얻었습니다.)

관련 문제