1

ここで、行の列の値に応じて JOIN を行うことについて質問を投稿しました。友達追加機能を作成する必要があります。この機能では、相互に追加している 2 人のユーザーの ID をuser_1_id(私の ID) と user_2_id(友達 ID) に書き込みます。あなたが誰と友達であるかを見たいときは、現在のユーザー(閲覧しているユーザー)のIDを持っているかどうuser_1_idかに応じてDEPENDINGを選択します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 に答える