0

私は次の表をしなければなりません:

画像:

imageID    userId    Translated    theImage
--------------------------------------------
    1         2         1           image1
    2         3         0           image2
    3         3         0           image3 
    4         3         0           image4
    5         3         1           image5

およびtranslationChains:

imageID    sourceLang    targetLang
------------------------------------
   1           2            3
   2           4            1
   3           5            1
   4           4            2
   5           1            4          

現在、2 つのオプションがあります。特定のユーザー向けに翻訳されていないすべての画像を任意の言語で選択するか、このユーザー向けに特定の言語で翻訳されていないすべての画像を選択します。

最初のオプションについて次のクエリがあります。

"Select images.imageid, images.theimage, images.translationRating 
From images where images.userID=? And images.translated =0"

2番目のオプションについては、次のとおりです。

"Select images.imageid, images.theimage, images.translationRating 
From images, translationchains  
where images.userID=? And images.translated =0 and
translationchains.imageId = images.imageid
and translationchains.targetLang = ? " 

たとえば、ユーザー 3 で最初のクエリを使用する場合、結果は次のようになります。

2         3         0           image2
3         3         0           image3 
4         3         0           image4

user 3 と targerLang = 1 の 2 番目のクエリでは、結果を次のようにします。

    2         3         0           image2
    3         3         0           image3 

この 2 つのクエリを、すべての場合に機能する 1 つのクエリに結合したい (送信するパラメーターに従って)

どうすればできますか?

2 番目のパラメーター (translationchains.targetLang = ?) として文字列 " " (空の文字列) を送信しようとしたため、この条件は無視されますが、機能しませんでした

4

3 に答える 3

1

あなたはこれを試すことができます

最初のクエリ

      Select * From images where userID=3 And translated =0

デモはこちら

出力:

  imageID   userId  Translated  theImage 
   2          3          0      image2
   3          3          0      image3
   4          3          0      image4

2 番目のクエリ

   Select i.imageID, userId, Translated, theImage 
   From images i
   inner join translationchains  t
   on t.imageId = i.imageid
   where i.userID=3 And i.translated =0 
   and t.targetLang = 1 

デモはこちら

出力:

 imageID    userId  Translated  theImage 
    2         3         0       image2
    3         3         0       image3

コンバイン:

 Select i.imageID, userId, Translated, theImage 
 From images i
 inner join translationchains  t
 on t.imageId = i.imageid
 where i.userID=3 And i.translated =0 
 and t.targetLang in (select targetLang from translationChains  )
                                ^^^^^-------replace this by 1 or 2 or 3 or let it like that for all

    //-- if you want change targetLang just replace it by any number
    //--like that (select 1 from translationChains  )

デモはこちら

OBS:言語を選択してからPHPで実行することもできます

   $sql .= "AND t.targetLang = the_id_selected_of_language ";
于 2013-04-01T11:03:10.197 に答える
0

以下のクエリを試してください

SELECT images.imageid, images.theimage, images.translationRating 
FROM images
INNER JOIN translationchains ON translationchains.imageId = images.imageid
WHERE images.userID=? 
AND (
    (images.translated =1 AND translationchains.targetLang = ?) 
    OR (images.translated =0)
)
于 2013-04-01T10:02:23.857 に答える