2012-01-27 18 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

? –

答えて

0

「翻訳済み」という名前の新しいブール型列を追加するだけではどうですか?次に、単に「SELECT * FROM somewhere WHERE translated = FALSE」を実行するだけで、翻訳されていない結果が戻されます。この方法では、既に翻訳された文字列を再翻訳する必要があることをマークすることもできます。

+0

いいえ、各文字列を翻訳している他のユーザーがいるでしょう。全体的に、翻訳の比較のために翻訳テーブルの翻訳を使用して、決定が最終的になるまで(最良の翻訳を選んで)行います。文字列ごとに1つの翻訳を適用することはできません。良い提案ですが、文字列ごとに1つの翻訳があれば、これを行っていました。 – MacMac

+0

さて、ちょうど3つの値を持つ "一時的な"テーブルを持つのはどうですか?ユーザーID、翻訳ID、および翻訳。内部結合を避けながら複数の翻訳をすぐに戻すことができます(translationIDを使用)。 – detra83

0

あなたは、単にNOT EXISTS()を使用することができます。

ここにテーブルがUSER_IDいる
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

関連する問題