2016-07-13 25 views
1

ユーザーのフレンドリストを返そうとしていますが、user_idに一致する値を収集しようとしています。ここで値に応じて行の異なる列を選択

| ID | user1_id | user1_status | user2_id | user2_status | 
| 1 | 1  | 0   | 2  | 0   | 
| 2 | 4  | 1   | 5  | 1   | 
| 3 | 4  | 1   | 6  | 0   | 
| 4 | 1  | 0   | 4  | 1   | 

は、私が持っている問題であり、私が探していた値は、いずれかの「user1_id」/「user2_id」にすることができ、その後、私は他のユーザーのための「USER_STATUS」を返す必要があります。 n。私はこのテーブルを本当にシンプルにしました。私のバージョンでは、サーバが復帰しないようにもっとたくさんのカラムがあります。

クライアントuser_idが4なので、user1_id/user2_idが4のすべての行を選択して、他の人user_statusを返す必要があるとします。この表では、値が4の最初のケースがuser1_idにあり、その行がuser2_idとuser2_statusを返す必要があります。ここで

は、私がこれまで持っているものですが、それは動作しません:

mysqli($connect, " 
SELECT `id` 
    CASE 
     WHEN `user1_id`='4' THEN `user2_id` AND `user2_status` 
     WHEN `user2_id`='4' THEN `user1_id` AND `user1_status` 
    ELSE NULL 
    END 
     from 'relationship' 
     where `user1_id`='4' OR `user2_id`='4' 
") 

私はこのクエリ文を書くにはどうすればよいですか?

+0

なぜPHPタグがありますか? –

+0

私はこれをPHPでクエリしているので、取り除くべきですか? – toastext

+0

この質問は、SQLに関するもので、PHPタグ –

答えて

1

CASE syntaxを参照すると、タプルではなく1つの列を返すように定義されていることがわかります。さらに、クエリで(user2_id、user_status)またはNULLのいずれかを取得しようとしています。ここでは、許可されていない列の数に不一致があります。

あなたが本当にCASEを使用したい場合は、あなたが行うことができます:不格好で混乱

SELECT `id` 
    CASE 
     WHEN `user1_id`='4' THEN `user2_id`, 
     ELSE NULL 
    END 
    CASE 
     WHEN `user2_id`='4' THEN `user1_id` 
     ELSE NULL 
    END 
    CASE 
     WHEN `user1_id`='4' THEN `user1_status` 
     ELSE NULL 
    END 
    CASE 
     WHEN `user2_id`='4' THEN `user2_status` 
     ELSE NULL 
    END 

    FROM 'relationship' 
     where `user1_id`='4' OR `user2_id`='4' 

はい、。 UNIONを使うともっと簡単になります。

SELECT id, user2_id AS uid, user2_status as ustatus FROM relationship WHERE user1_id = 4 
UNION 
SELECT id, user1_id AS uid, user1_status as ustatus FROM relationship WHERE user2_id = 4 
+0

を削除することができるので、あなたはCASE構文を参照していると言っています。あなたが提案する良い方法はありますか? CASE構文は私がmysqlが "if"文を実行できる唯一の方法だったからです。 BTWありがとう、私はこれを試してみましょう。 :) – toastext

+0

は私の答えを更新しました。それは組合だ。 – e4c5

+0

あなたは私の心を読んでいます。 "ユニオン"構文でいくつかの研究をするつもりです。 – toastext

関連する問題