2012-04-10 97 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