2014-03-27 26 views
0
$query = "SELECT 
      table1.first_name, 
      table1.id, 
      table1.profile_image 
     FROM table1,table2 
     WHERE table1.id = (
          CASE 
          WHEN '$id' = table2.id1 
          THEN 
           table2.id2 
          WHEN '$id' = table2.id2 
          THEN 
           table2.id1 
          ) 
     AND table2.case='done'"; 

此查詢失敗,我無法弄清楚爲什麼......我想要的是獲取table1和table2之間的ID上的聯接。事情是table2有兩個id字段,我不知道我想要的Id是否在字段id1id2。然後加入其他ID(不是$ ID,但是從$ ID表2中的合作伙伴),以表1中的ID ...無法在mysql查詢中發現錯誤

+0

如果你無法弄清楚,我相信我們不能從你在這裏發佈的內容中找到答案。一些示例數據和結果,實際和預期,將有所幫助。 – 2014-03-27 21:31:12

+0

由於什麼錯誤而失敗? – h2ooooooo

+0

@ h2ooooooo您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第一行使用AND'table2.case ='done''附近使用正確的語法。 – 0LLiena

回答

4

你知道的情況下建設的正確的語法是:

CASE 
    WHEN ... 
    THEN .... 
    WHEN ... 
    THEN .... 
    ELSE ... 
END 

通知的END在....端;)

0

case缺乏end是與查詢的明顯的問題。然而,這將更好的寫法如下:

SELECT t1.first_name, t1.id, t1.profile_image 
FROM table1 t1 join 
    table2 t2 
    on ('$id' = table2.id1 and t1.id = t2.id2) or 
     ('$id' = table2.id2 and t1.id = t2.id1) 
WHERE t2.case = 'done'; 

的使用注意事項明確join語法,使用表別名,並與基本布爾邏輯更換case

-1

試試這個:

SELECT table1.first_name,table1.id,table1.profile_image 
FROM table1,table2 
WHERE (table1.id = table2.id1 or table1.id = table2.id2) 
AND table2.case='done' 
+0

這是錯誤的,在您的聲明中不考慮'$ id'。 –

0
Select first_name, id, profileImage From Table1 
inner join (
Select id1 as t2id From Table2 where `case` = 'done' 
union 
Select id2 From Table2 Where `case` = 'done') t2Ids 
) On Table1.id = t2Ids.t2id 
Where t2Ids.t2Id = $id 

將是另一種方式來做到這一點。