2016-06-10 27 views
1

我知道標題並非如此描述,但很難找到一些通用的描述我的情況。如果有人想編輯,感覺自由...存儲關注用戶的最佳方式

所以,我有一個postgres數據庫,users表。我想存儲一個用戶後面的用戶,我真的不知道我該如何做到這一點。我想要像SELECT followed_users FROM users WHERE username='username'這樣做,這將返回我每個用戶名,或id,或每個後續用戶的任何。但我沒有看到任何清潔方式來做到這一點。

也許一個例子會更詳細地描述:user1user2user3之後。
如何儲存誰是user1

編輯:我不知道用戶將遵循多少用戶。

謝謝你的幫助。

+1

創建一個名爲類似'user_follows'的新表,其中包含像'user_id1 | user_id2'或'follower_id |如果你想要更多的描述,或者如果你認爲你可能有更多的關係,除了「follow」之後,然後用'user_id1 | user_id2 |關係'在哪裏'relationship.relationship'可能有像'後面,學生,姐姐等'的價值... – JNevill

+0

我忘了提及:我不知道用戶將遵循多少用戶,所以我不知道如果這是一個很好的解決方案,或者我還沒有明白答案。對不起,如果我不明白,我很難想象這 – mgul

+0

@Jhun根據你的描述,JNevill的解決方案(在評論中)將是你最好的選擇。爲了擴展它,爲了得到用戶關注的用戶,你需要做一些類似'SELECT * FROM users WHERE user_id IN(SELECT user_id2 FROM user_follows WHERE user_id1 ='4')' –

回答

3

擴大對我的評論上面,因爲它得到羅嗦:

創建一個名爲像user_follows與列的新表像

user_id1 | user_id2 

follower_id | follows_id 

然後你就可以查詢:

SELECT t1.username as follower_username, t3.username as following_usernae 
FROM users t1 
    INNER JOIN user_follows t2 ON t1.user_id = t2.follower_id 
    INNER JOIN users t3 ON t2.following_id = t3.user_id 
WHERE t1.user_id = <your user> 

最後,將您的表格視爲「對象」。然後,當您遇到像「如何添加跟隨其他用戶的用戶」這樣的問題時,您可以確定此關係是新對象還是現有對象的屬性。由於用戶可能會關注多於一個其他用戶,但這種關係對於「用戶」來說不是一個好的屬性,所以它會得到自己的表user_follows

由於user_follows是兩個用戶可能需要彼此,它可能是有意義的增加對象的範圍relationships和關係型存儲爲表的屬性只是一個類型的關係:

user_id1 | user_id2 | relationship_type 

其中relationships.relationship_type可能有這樣的等follows, student of, sister值...

因此,新的查詢會是這樣的:

SELECT t1.username as follower_username, t3.username as following_username 
FROM users t1 
    INNER JOIN relationships t2 ON t1.user_id = t2.user_id1 
    INNER JOIN users t3 ON t2.user_id2 = t3.user_id 
WHERE t1.user_id = <your user> AND t2.relationship_type = 'Follows'; 
+0

我會堅持這種設計。謝謝! – mgul

1

我想補充另一個表,讓我們把它following爲了便於討論,從而節省了對用戶和用戶他們以下幾點:

CREATE TABLE following (
    user_id INT NOT NULL REFERENCES users(id), 
    following_id INT NOT NULL REFERENCES users(id), 
    PRIMARY KEY (user_id, following_id) 
) 

然後,你可以查詢到所有用戶的特定用戶通過連接以下與users表(兩次)。例如。,以獲取我(用戶名「mureinik」)所有用戶的名稱如下:

SELECT fu.username 
FROM following f 
JOIN users u ON f.user_id = u.id 
JOIN users fu ON f.user_id = fu.id 
WHERE u.username = 'mureinik' 
+0

感謝您的幫助,我會堅持這一點,因爲它與@ JNevill的設計一樣 – mgul