1

在这里,我发布了一个关于根据行中列的值进行 JOIN 的问题。您将需要创建一个添加好友功能,在其中将相互添加的 2 个用户的 ID 写入user_1_id(my id) 和 user_2_id(friend id)。当您想查看与谁成为朋友时,请选择取决于当前用户(正在浏览的用户)的 ID是否user_1_id或有user_2_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 
  ';

如果有人遇到问题,希望这会有所帮助

4

1 回答 1

1

就个人而言,我讨厌使用 CASE 语句。它使查询看起来很混乱。尝试使用IF 函数

$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。

试试看 !!!

于 2012-04-10T18:19:20.010 回答