2012-04-10 8 views
1

ここでは、行の列の値に応じてJOINを実行するかどうかについての質問を投稿しました。 user_1_id(私のID)とuser_2_id(友人ID)にお互いを追加している2人のユーザーのIDを書き込むAdd Friend機能を作成する必要があります。 あなたは、あなたと友達である人を参照してくださいsurrentユーザー(閲覧している1)のIDを持っているuser_1_idかどうかuser_2_idに応じて選択したいmySQLで "friends"を選択する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

答えて

1

を持っていた場合、私はCASE文を使用して嫌いだ。助けていますそれは、クエリが煩雑に見えるようにします。 table3.val1とtable3.val2 <> $ USER_IDは、その後、users_fetchがある場合は、このクエリでは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'; 

を使用してみてください-1。

試してみてください!

+0

私はあなたがしたことをやろうとしました。あなたのコードは完璧なものです。場合でもそれは仕事をshoudlが、私はエラーメッセージが表示され続ける –