2013-10-25 72 views
-1

我在我的數據庫中有一個用戶系統,我想添加添加好友的可能性。 用戶必須能夠:如何在我的數據庫中實現友誼系統?

  • 在請願書發送消息
  • 阻止用戶
  • 設置別名朋友用戶。

所以我雖然此表:

id_friend 
id_user1 
id_user2 
id_user_sender 
alias_user1 NULL 
alias user2 NULL 
status 
message NULL 
date_sent 
date_accepted NULL 

我要去解釋每個科拉姆:

  • id_friend:表的PK。
  • id_user1:用戶表的FK
  • id_user2:用戶表的FK
  • id_user_sender:是誰送的請願
  • alias_user1 NULL的id_user:由id_user1 seted到別名id_user2(可選)
  • alias user2 NULL:由id_user2設置爲id_user1的別名(可選)
  • 狀態:如果0友情掛件。如果有1個朋友。如果2友誼激怒。
  • 消息 NULL:如果狀態= 0然後可以包含由發送者
  • DATE_SENT seted一個消息:日期當發送方發送的請願
  • date_accepted NULL:日期時user_requested acepted的友誼。

然後讓所有特定用戶的我會做的朋友:

select id_user1, id_user2 from friends where id_user1 = $my_user_id or id_user2 = $my_user_id and status = 1; 

然後我會放棄等於礦id_users,所以結果只包含誰是我的朋友用戶。但要獲得別名我不知道。可能會有更多的表格?

我想我設計錯了......你有什麼小費或建議嗎?你能舉一些例子嗎?

如果你需要更多的信息讓我知道,我會編輯帖子。

+0

什麼之間的區別'alias_user1'和'alias_user2'? – Manolo

+0

謝謝!對不起,我編輯過。一探究竟! :)但是,我需要更多的表,至少到用戶別名。 – harrison4

+0

你想用別名做什麼?展示下?或者用它搜索? – Manolo

回答

3

一些事情,我會做:

  1. 你不需要id_user_sender。您可以假設發件人總是存儲在id_user1中,另一個存儲在id_user2上
  2. 您可以用一個名爲blocked的布爾值替換狀態。如果你可以告訴的友誼正在等待或不通過檢查date_accepted值爲null

對於獲得的$ my_user_id朋友的別名,你可以調用這個查詢

select case when id_user1=$my_user_id then alias_user2 else alias_user1 end 
from friends 
where id_user1=$my_user_id or id_user2=$my_user_id 
+0

謝謝,並想象我想選擇與他們的性別領域(這是在用戶表中)的所有朋友。我如何鏈接兩個表?任何想法?你能舉個例子嗎? – harrison4

+0

您還可以在select子句中添加'case when id_user1 = $ my_user_id then id_user2 else id_user1 end'來獲取朋友的id。然後你可以(左)加入users.id的用戶表。 –

+0

所以這可以用? 'select u.id_sex from friends f,users u where u.id_usuario = case when f.id_user1 = $ my_user_id then f.id_user2 else f.id_user1 end and f.id_user1 = $ my_user_id or f.id_user2 = $ my_user_id;'謝謝! – harrison4

0
select id_user1, id_user2, alias_user2 from friends where id_user1 = $my_user_id or id_user2 = $my_user_id and status = 1; 

也許這是你在找什麼。