2014-10-29 88 views
0

舉個例子,假設我希望用戶成爲網站上的朋友。連接來自同一個表的兩行MYSQL

說,user_id 1和user_id 2成爲朋友,我向我的表友添加一行: 表好友(user_id1 INT,user_id2 INT),這個表的問題是我必須查詢每一列才能得到我的結果。

行可能是:

user_id1 user_id2 
    1   2 
    2   3 

因此,要獲得用戶的朋友ID 2,我需要查詢兩列(這使得一些不那麼實用查詢),是否有更好的方法來做到這一點?

ie: 
    $u_id = 2; 
    SELECT * FROM friends WHERE (user_id1 = $u_id OR user_id2 = $u_id) 

回答

0

我會去的少將兩行一個連接人員A添加到人員B以及將第二連接人員B添加到人員A的空間高效方法。然後,單個列上的單個查詢將檢索所有朋友。

此設置也可用於「朋友」具有不同特權或友誼級別的地方。所以人A可以給B更多的訪問他們的東西比B給予A.

+0

認爲這可能是最好的方式來做到這一點..謝謝。 – Callombert 2014-10-29 16:12:47

0

你可以嘗試不同的方法,存儲一個人的所有朋友場內朋友在表和儲存一切作爲JSON對象。

這樣你就可以在單個查詢中擁有所有人的朋友,並且可以通過簡單的foreach查詢獲得tehir配置文件。

我一直在使用這個幾個多對多的邏輯,它的工作原理沒有鏈接表的幫助。

0

我想我會喜歡UNION,是這樣的:

SELECT user, friend FROM ( SELECT user_id1 AS user, user_id2 AS friend FROM friends UNION SELECT user_id2 as user, user_id1 AS friend FROM friends ) u WHERE u.user = $u_id

(約使用預處理語句來代替,當然裸變量的適當警告)