簡體   English   中英

使用類型列定義用戶關系時的有效使用

[英]Efficient use when defining user relations with a type column

這是我的第一個! 快速淘汰:

場景我正在創建一個應用程序,您可以在其中挑戰其他用戶去做某事(例如,本周跑步4英里,下蹲3個盤,等等)。 我更多地是前端人員,所以我在某些數據庫拖曳中遇到了一些問題,而其他方面則沒有。

對於用戶的友誼關系,我使用兩行來顯示往復運動。 我要求您作為朋友,並且我的uid和您的uid將放入關系表中。 一旦接受,就會添加相反的內容。

但是,當涉及到挑戰時,我真的希望每個挑戰僅使用一行,然后隨進度進行更新。 類型0 =已發出挑戰,1 =已接受挑戰,2 =已完成挑戰。

我還有另一個表,其中包含每個挑戰的信息(條款,開始日期,結束日期,獎勵等),因此每個挑戰都將與Challenge_info表中的一行相關聯–我只想/需要的另一個原因在挑戰表中每個挑戰有一行。

問題現在我遇到的問題是試圖獲取用戶最新挑戰的提要。 因此,請轉到Tom的個人資料頁面,您應該會看到他最近的活動清單:“ Tom向Amy挑戰並獲勝!Tom輸給了John。等等。”

我可以將用戶表保留在挑戰表上,並獲得特定用戶的挑戰,某些類型的挑戰以及所有類似的東西,但是我找不到一種有效的方法來獲取挑戰者的用戶名該用戶或受到此用戶挑戰的用戶。

桌子

__USER__

ID  UNAME  
1   Tom  
2   John  
3   Timmy  


__CHALLENGES__  
CID    Challenger_ID    Challenged_ID      Type  
1        1                2                 0  
2        1                3                 1  
3        2                1                 2  

CLIFFS定義這種關系的最有效方法是什么?如何加入這些表格,以便能夠找到Tom所面臨的所有挑戰,但還能獲得他所擁有的人的名字和關系(挑戰或挑戰)與之互動?

感謝您的時間和考慮!

只要索引Challenger_ID,使用2個左聯接就不會有問題(我假設USER.ID被索引為PK):

select U1.uname, U2.uname from USER U1
left join CHALLENGES C on C.Challenger_ID = U1.ID
left join USER U2 on C.Challenged_ID = U2.ID

或僅使用內部聯接:

select U1.uname, U2.uname from USER U1, USER U2, CHALLENGES C
where C.Challenger_ID = U1.ID AND C.Challenged_ID = U2.ID

執行計划會根據您的索引而有所不同,但是您可以理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM