2012-04-10 36 views
1

這裏我發佈了一個關於做JOIN的問題,這取決於行中列的值。 你將需要你創建一個添加朋友功能,在這裏你將兩個正在互相添加的用戶的ID寫入user_1_id(我的ID)和user_2_id(朋友ID)。 當你想看看你是誰的朋友,選擇取決於user_1_iduser_2_id是否具有近況用戶的ID(誰是瀏覽一個)用mySQL選擇「朋友」JOIN CASE

我想通了下面這樣下來是要查詢在需要的情況下使用。

下面是該查詢

$sql_inp = 'SELECT DISTINCT 
       users.id, users.first_name, users.last_name, 
    CASE 
       WHEN friends.user_2_id="'.$_SESSION[USER][id].'" //equal to current user id 
       THEN (SELECT friends.user_1_id FROM friends WHERE friends.user_2_id="'.$_SESSION[USER][id].'") // if user_2_id is My id, then fetch the other row 
     ELSE friends.user_2_id // obviously the opposite 
    END 
    FROM users 
    LEFT JOIN friends ON users.id= // this case is completely the same as one above 
    CASE 
       WHEN friends.user_2_id="'.$_SESSION[USER][id].'" THEN (SELECT friends.user_1_id FROM friends WHERE friends.user_2_id="'.$_SESSION[USER][id].'") 
    ELSE friends.user_2_id 
     END 
    WHERE friends.user_1_id="'.$_SESSION[USER][id].'" OR friends.user_2_id="'.$_SESSION[USER][id].'" // fetch the row where the either one of the values is equal to My id 
    '; 

希望這有助於如果任何人有麻煩

+1

對不起,我不明白你在做什麼。你可以發佈你的模式以及一些樣本數據和一些預期的結果嗎? – liquorvicar 2012-04-10 18:17:01

回答

1

就個人而言,我不喜歡使用CASE語句。它使查詢看起來很混亂。嘗試使用IF function

$sql_inp = 'SELECT 
    table1.val1,table1.val2, 
      table2.val1,table2.val2, 
      IF(table3.val1="'.$user_id.'",table3.val1, 
      IF(table3.val2 ="'.$user_id.'",table3.val2, 
      IFNULL(table3.val2,-1))) users_fetch 
    FROM table1 
    INNER JOIN table2 ON table2.val1=table1.val1 
    LEFT JOIN table3 ON table2.val1=users_fetch'; 

在此查詢,如果table3.val1和table3.val2 <> $ USER_ID,然後users_fetch是-1。

試試吧!

+0

我試着做你所做的事情,而你的代碼完美無缺。即使有案件它應該工作,但我不斷收到錯誤消息 – 2012-04-10 18:38:05