【问题标题】:add friends/contacts from a table of users to show changes as they happen从用户表中添加朋友/联系人以在发生更改时显示更改
【发布时间】:2012-07-04 19:38:22
【问题描述】:

我的系统使用一个用户表,其中包含多个元素,包括他们的在线状态。现在我想添加一个功能,以便每个用户都可以将联系人(即数据库中的现有用户)添加到他们的朋友或联系人列表中,以显示他们的姓名和在线状态。但是,我需要在线状态的任何更改以在联系人列表中更新,因此创建新表无济于事。

我一直在研究这方面的观点,但对数据库没有太多经验,我想知道这是否是正确的方法,以及如何做的更多细节。

这是我想到的步骤:

  1. 当用户注册时,创建一个视图,即 view_name = username_view。
  2. 要添加联系人,请从主用户表中选择数据并添加到用户视图中
  3. 要删除联系人,请从视图中删除所选数据。

我不确定这是否可以通过视图进行,如果不能,请帮助我。

谢谢。

【问题讨论】:

    标签: mysql sql database schema


    【解决方案1】:

    ER 数据库 = 实体和关系数据库通过使用一个包含实体“用户”的表和一个用于将用户连接到另一用户的关系“朋友”的表来处理。

    查询可以是:

    SELECT users.* 
    FROM friends 
    LEFT JOIN users ON (users.user_id = friends.friend_id) 
    WHERE friends.user_id = :user
    

    示例:

    一个用户表,用于实体用户

    CREATE TABLE user (user_id SERIAL, name TINYTEXT NOT NULL);
    

    示例用户

    user_id | name
          1 | Anna
          2 | Bertil
          3 | Carl
          4 | David
          5 | Erik
    

    朋友表,用于两个用户之间的关系,(不是每个用户一个,只有一个)

    CREATE TABLE friends (
      user_id BIGINT UNSIGNED NOT NULL,
      friend_id BIGINT UNSIGNED NOT NULL,
      PRIMARY KEY (user_id, friend_id)
    );
    

    如果 Anna 将 Beril 和 Carl 添加为好友,而 Carl 将 David 和 Erik 添加为好友,则表格的内容将是:

    user_id | friend_id
          1 |         2
          1 |         3
          3 |         4
          3 |         5
    

    如果我们想列出 Annas 朋友的名字,并且我们都知道 Annas user_id = 1,那么我们可以使用这个查询(就像上面的那个)

    SELECT users.name 
    FROM friends 
    LEFT JOIN users ON (users.user_id = friends.friend_id) 
    WHERE friends.user_id = 1
    

    【讨论】:

    • 在创建两个表后,我究竟如何添加这种关系?
    • “关系”是第二个表,它可以但不是必须将其连接添加到用户表作为外来键。重要的是上面数据库查询的 LEFT JOIN 部分
    • 对不起,我对数据库很陌生,让我看看我是否理解正确; 1)使用所有用户列表创建我的用户表 2)在每个用户注册时为每个用户创建一个朋友表 3)当用户想要将朋友添加到他的列表时使用 LEFT JOIN 4)用户现在可以查看所有相关的列和数据在他的朋友表上,并且在用户表上进行更改时更新数据。
    猜你喜欢
    • 2011-08-09
    • 2012-01-14
    • 2014-07-23
    • 2012-05-20
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    相关资源
    最近更新 更多