2012-08-03 2 views
3

나는 멀 리어 언어 웹 사이트에서 일하고 있으며 웹 사이트의 모든 언어에 기사가 있거나 없을 수도 있습니다. 또한 사용자는 선호 언어를 등록하고 선택하십시오.SQL, 우선 순위가 영어 인 기사 언어로 주문

제 문제는 기사를 표시 할 때 다음과 같은 방식으로 표시하고 싶습니다. 사용자가 로그인 한 상태에서 선택한 언어를 표시하고 기사가 자신의 언어로되어 있지 않은 경우 이 프랑스어 존재하지 않는 경우 등 다음 독일어, 다른 영어로 표시

이 내 문서 테이블 : 나는 어떻게 MySQL의에서이 작업을 수행하는 아무 생각이

news_id | lang | title | text | 
     1 | en | News en | bla.. | 
     1 | fr | News fr | bla.. | 
     2 | en | New en | bla.. | 
     3 | fr | Nws fr | bla.. | 

.

그리고 내 문제를 이해할 수 있기를 바랍니다. 어떻게 더 명확하게 설명 할 수 있을지 모르겠습니다.

답변

1

고든의 답은 기술적으로 정확하지만 약간 다른 접근 방법을 권합니다. 사용 된 언어 집합에 대해 을 정의하는 또 다른 표를 추가 할 수 있습니다 (language).

 language 
-------------------------- 
| id | name | rank | 
-------------------------- 
    1  en  1 
    2  fr  2 
    3  de  3 
    4  nl  4 

이 테이블의 데이터 세트는 이제 사이트 언어의 부분 순서를 결정합니다.

SELECT a.* 
    FROM article a 
     , language b 
    WHERE a.id = [xxx] 
    AND a.lang = b.name 
ORDER BY (a.lang = [session.lang]) DESC, 
     b.rank ASC 
    LIMIT 1 

무엇 점은 질문 : 당신의 라인을 따라 뭔가를 할 것 쿼리에서 사용하려면?
글쎄, 이런 방식으로 설정하면 언어 집합의 부분 순서를 다른 것으로 변경해야하므로 변경 사항을 반영하도록 쿼리를 업데이트 할 필요가 없습니다. 허락하신다면, 몇 번의 질문만으로도 번거롭지는 않겠지 만, 수십 개의 언어 인식 쿼리를 작성하면 발에 물려 듭니다.

3

원하는 언어를 얻으려면 사용자 환경 설정 테이블에 가입해야합니다. 그런 다음 해당 정보를 다음 순서로 사용하십시오.

이 특정 순서는 다음과 같이 우선 언어를 선택한 다음 영어를 선택한 다음 프랑스어를 사용합니다. 우선 우선권을 얻으려면 두 번째 두 개의 "when"절을 제거하십시오.

+0

감사합니다. 언어 변수가 실제로 세션 변수에 저장 되었기 때문에 조인을 사용하지 않을 것입니다. –

관련 문제