2012-01-27 3 views
0

사용자가 문자열을 번역 할 수있는 번역 응용 프로그램을 만들고 있지만 사용자가 이미 번역 한 행을 건너 뛰어 모든 번역이 사용자가 다른 테이블에 저장해야합니다.다른 테이블에 레코드가있는 경우 행 건너 뛰기

기본적으로 사용자가 번역하지 않은 문자열이 발견 될 때까지 건너 뜁니다. 그러나 사용자가 이미 번역 한 레코드를 여전히 선택하므로 SQL이이를 수행하지 않습니다.

는 SQL : 나는이 작업을 수행 할 수있는 방법

SELECT strings.key, 
     strings.string 
FROM 
(
    app_language_strings strings 

    INNER JOIN est8_languages lang ON strings.language_id = lang.lang_id AND lang.lang_format = 'french' AND strings.admin_string = 0 
) 
WHERE strings.string_id NOT IN (SELECT trans.string_id FROM app_translations trans WHERE trans.user_id = 5) 
LIMIT 0, 1 

당신은 내가 NOT IN 구문에 넣어 볼 수 있지만이 행을 제외하지 않기 때문에?

+0

을 USER_ID이있는? –

답변

0

왜 "번역 된"것과 같은 이름의 새로운 부울 열을 추가하지 않는 것이 좋을까요? 그런 다음 "SELECT * FROM somewhere WHERE translated = FALSE"를 수행하면 번역되지 않은 결과 만 반환됩니다. 이 방법을 사용하면 이미 다시 번역해야하는 번역 된 문자열을 표시 할 수도 있습니다.

+0

아니요, 다른 사용자가 각 문자열을 번역 할 것입니다. 전반적으로 결정이 끝나기 전에 번역본 간의 번역을 위해 번역본의 번역본을 사용합니다 (최상의 번역본 선택). 문자열 당 하나의 번역을 갖는 것은 적용 할 수 없습니다. 좋은 제안이지만 문자열 당 하나의 번역 인 경우이 작업을 수행했을 것입니다. – MacMac

+0

그렇다면 3 가지 값만있는 "임시"테이블은 어떻습니까? 사용자 ID, 번역 ID 및 번역 내부 조인을 피하면서 여러 번역을 신속하게 다시 얻을 수 있습니다 (translationID 사용). – detra83

0

당신은 단순히 NOT EXISTS() 사용할 수 있습니다 테이블은 여기

SELECT * FROM strings WHERE NOT EXISTS (SELECT * FROM translated_strings WHERE id=strings.id) 
+0

MySQL 5.5에는 문서 (http://dev.mysql.com/doc/refman/5.5/en/exists-and-not-exists-subqueries.html)에 명시된대로 'EXISTS' 하위 쿼리 구문이 있습니다. – dgw