用mySQL JOIN CASE选择“friends”

时间:2012-04-10 18:10:43

标签: mysql join case

在这里,我发布了一个关于根据行中列的值进行JOIN的问题。 您需要创建一个添加好友功能,在该功能中,您将相互添加的两个用户的ID写入user_1_id(我的ID)和user_2_id(好友ID)。 如果您想查看自己与谁是朋友,请选择依赖user_1_iduser_2_id是否具有不同用户的ID(正在浏览的人)

我想出来,所以下面是您想要使用的查询,以备不时之需。

这是查询

$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 个答案:

答案 0 :(得分: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。

试一试!!!