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

和翻译链:

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

现在我有两个选择:我想要么选择所有没有为特定用户翻译成任何语言的图像,要么选择所有未翻译成特定语言的用户的图像。

对于第一个选项,我有以下查询:

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

对于第二个选项,我有:

"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

对于用户 3 和 targerLang = 1 的第二个查询,我希望结果为:

    2         3         0           image2
    3         3         0           image3 

我想将这两个查询组合成一个适用于所有情况的查询(根据我将发送的参数)

我该怎么做?

我试图将字符串“”(空字符串)作为第二个参数(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

第二个查询

   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 回答
0

试试下面的查询

SELECT a.imageid, a.theimage , a.translationRating
FROM images a , translationchains b
WHERE a.imageId = b.imageid
AND a.translated = 0
GROUP BY b.targetLang

上述查询将根据目标语言对结果进行分组

于 2013-04-01T10:14:11.440 回答