2016-07-13 95 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」只爲其他用戶。 ñ。我讓這張桌子非常簡單。在我的版本中,我希望我的服務器避免返回更多的列。

假設客戶端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,您會看到它定義爲返回單個列而不是元組。此外,在您的查詢中,您正嘗試獲取(user2_id,user_status)或NULL。在這裏你會得到不允許的列數不匹配。

如果你真的想使用情況下,你可以這樣做:

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」語句的唯一方式。順便謝謝,我會試試這個。 :) – toastext

+0

更新了我的答案。這是工會。 – e4c5

+0

嘿,你看過我的想法了。打算在「union」語法中進行一些研究。 – toastext

相關問題