【问题标题】:How to implement a friendship system in my database?如何在我的数据库中实现友谊系统?
【发布时间】:2013-11-04 14:31:08
【问题描述】:

我的数据库中有一个用户系统,我想添加添加朋友的可能性。 用户必须能够:

  • 在请愿书中发送消息
  • 屏蔽用户
  • 为朋友用户设置别名。

所以我虽然这张表:

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 设置的别名(可选)
  • status :如果为 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,因此结果仅包含我的朋友用户。但是要获得别名,我不知道。可能有更多的桌子?

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

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

【问题讨论】:

  • alias_user1alias_user2有什么区别?
  • 谢谢!对不起,我已经编辑了。看看这个! :) 但是,我认为我需要更多表,至少对于用户别名而言。
  • 你想用别名做什么?展示下?还是用它搜索?

标签: mysql sql database database-design data-structures


【解决方案1】:

我会做的一些事情:

  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

【讨论】:

  • 谢谢,想象一下我想用他们的性别字段(在用户表中)选择所有朋友。如何链接这两个表?任何想法?请给我一个例子好吗?
  • 您也可以在 select 子句中添加case when id_user1=$my_user_id then id_user2 else id_user1 end 来获取好友的 id。然后你可以(左)加入 users.id 上的用户表
  • 这样可以吗? 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; 谢谢!
【解决方案2】:
select id_user1, id_user2, alias_user2 from friends where id_user1 = $my_user_id or id_user2 = $my_user_id and status = 1;

也许这就是你要找的。​​p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2016-09-27
    • 2014-09-22
    • 1970-01-01
    • 2010-12-30
    • 2015-09-14
    • 2012-10-28
    相关资源
    最近更新 更多