2012-01-27 60 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說明? – 2012-01-27 15:51:16

回答

0

爲什麼不只是添加一個名爲「翻譯」的新布爾列?然後你只需做「SELECT * FROM where where translation = FALSE」,你只能得到未翻譯的結果。採用這種方法,您還可以標記已翻譯的字符串,並需要重新翻譯。

+0

不,不然,會有其他用戶翻譯每個字符串,總體而言,我將使用翻譯表中的翻譯,以便在決定是最終(具有最佳翻譯效果)之前進行翻譯之間的比較。對每個字符串進行一次翻譯不適用。好的建議,但如果是每個字符串一次翻譯,我會這樣做。 – MacMac 2012-01-27 15:29:03

+0

好的,那麼如果只有三個值的「臨時表」用戶ID,翻譯ID和翻譯。您可以快速獲取多個翻譯(使用translationID),同時避免內部連接。 – detra83 2012-01-27 15:32:19

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 2012-01-27 15:52:38

相關問題