2013-04-01 66 views
0

我有以下表格:與在條件(選擇全部或部分)的SELECT語句

圖片:

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   

現在我有兩個選擇: 我想要選擇所有未翻譯爲任何語言的特定用戶的圖像 或選擇該用戶的所有圖像不是'翻譯成特定的語言。

我已經爲第一個選項下面的查詢:

​​

和第二個選項我有:

"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 I想要的結果是:

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 =?)字符串「」(空字符串),所以它會忽略這個條件,但它沒有工作

+1

什麼是你想要的輸出? –

+0

行來自'圖像'表, 在第一個選項我不在乎圖像Lang(lang = all) 在第二個選項中我想要'translationChains'表中的所有行的targetLang是X –

回答

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) 
) 
+0

這不起作用,因爲在第一「和」條件我還需要它來images.translated = 0,這意味着無論如何它返回images.translated = 0,不檢查的targetLang –

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 

上面的查詢會根據目標語言分組結果

+0

和他們什麼?我需要可以選擇一個targetLang或選擇他們都 –

1

您可以試試這個

首先查詢

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

DEMO HERE

OUTPUT:

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 

DEMO HERE

OUTPUT:

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 "; 
+0

TNX,但這是相似,我寫的,我想一個查詢,對於兩種情況 - 一個特殊的參數或類似的事情 –

+0

編輯合併查詢 –

+0

TNX,我覺得這正在 –