2009-11-30 33 views
0

我在構建一個用戶可以將用戶添加到他們的「列表」中的網站。這個列表屬於用戶,但我想知道什麼是最好的方式來存儲/檢索/循環通過此列表中的函數,以顯示名單上的人,他們在那裏,誰創造它。如何存儲用戶列表,並讓用戶知道他們在列表中

所以一旦創建用戶名列表中,我會假設它存儲在MySQL表中的字段,然後寫這將搜索該表來查找影響當前登錄的用戶列表中的任何一個功能。

我的問題是兩倍。首先,假設列表只是a-z 0-9並且連字符和下劃線(用戶名中沒有空格,但用空格分隔),那麼將最好的字段類型存儲爲mysql。其次,在多個列表中搜索用戶名的最佳/最快方法是什麼?

回答

1

varchar,索引和附加緩存。

你創建一個帶有用戶名和用戶ID字段中的用戶表。然後創建一個表user_relation,在其中組合用戶標識符,以便您找到匹配項。在所有外鍵關係上放置索引。這應該給一個相當不錯的performanceboost :)

編輯設置它

表一些額外的信息:用戶 用戶名 - 詮釋(8) - 主鍵,自動遞增 名稱 - Varcahr(30) EmailAddress的 - VARCHAR(90) - 獨特

表:UserRelation ID - 詮釋(8) - 主鍵,自動增量 UserID_Source - 詮釋(8),指數(這是用戶) UserID_Friend - 詮釋(8 ),索引(這是一個朋友/關係從用戶離子)

這樣你就可以輕鬆地存儲關係到特定的用戶。

爲了得到一些效果,請使用類似的查詢:

SELECT `User`.*, `User`.`UserID` AS `UserID_Source` 
FROM `User` 
WHERE `User`.`UserID` = `user_relation`.`user_id_source` 

您可以通過一個擴展查詢JOIN直接獲取有關比賽或使用另一查詢;)

1

你最好的選擇是將每個名稱存儲在自己的行中。

1

如果您的列表包含(每個人都有自己的名單),最好的辦法是建立在某種類型的MySQL表中的數據(如MySQL是爲這種事情優化)的其他成員引用,比如你將需要2個簡單的表,表1(用戶表)將有2個列。 ID(INT或BIGINT),用戶名(VARCHAR)。

然後你的第二個表(用戶鏈接)將取決於如果鏈接是雙向進行,或者單向參見下文有2項。

雙向:該表將有2列User1(INT或BIGINT),User2(INT或BIGINT)。要檢索列表,只需在該表中查詢用戶標識位於User1或User2中的所有條目。

單向:該表將有2列,所有者(INT或BIGINT),Person(INT或BIGINT)。要爲用戶檢索列表,只需查詢此用戶擁有的所有條目即可。

這兩者之間的區別是,與雙向如果我添加到我的清單,我名單上的自動上午。如果單向刪除,那麼您必須將我添加到您的列表中才能顯示在您的列表中,即使您在我的列表中。

相關問題