-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 : 发送请求的 id_user
  • alias_user1 NULL:id_user1给id_user2设置的别名(可选)
  • alias user2 NULL:id_user2给id_user1设置的别名(可选)
  • 状态:如果 0 友谊垂饰。如果有 1 个朋友。如果 2 友谊结块。
  • message NULL:如果 status = 0 则可以包含发送者设置的消息
  • date_sent : 发件人发送请愿书的日期
  • date_accepted NULL:user_requested 接受友谊的日期。

然后要获得特定用户的所有朋友,我会这样做:

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

然后我会丢弃等于我的 id_users,所以结果只包含我的朋友的用户。但是要获得别名,我不知道。可能有更多的桌子?

我想我设计错了......你有什么提示或建议吗?你能举个例子吗?

如果您需要更多信息,请告诉我,我会编辑帖子。

4

2 回答 2

3

我会做的一些事情:

  1. 你不需要 id_user_sender。您可以假设发件人将始终存储在 id_user1 中,另一个存储在 id_user2 中
  2. 您可以将状态替换为一个名为blocked 的布尔值。您可以通过检查 date_accepted 值是否为空来判断友谊是否处于待处理状态

要获取 $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
于 2013-10-25T13:09:00.110 回答
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;

也许这就是你要找的。

于 2013-10-25T13:05:39.487 回答