从用户表中添加朋友/联系人以在发生更改时显示更改

时间:2012-06-30 18:21:30

标签: mysql sql database schema

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

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

以下是我想到的步骤:

  1. 当用户注册时,创建一个视图,即view_name = username_view。
  2. 从主要用户表中添加联系人选择数据并添加到用户的视图
  3. 删除联系人从视图中删除所选数据。
  4. 我不确定这是否可以通过观看,所以如果不是,可以帮助我。

    感谢。

1 个答案:

答案 0 :(得分:0)

ER数据库= Entites和Relations数据库通过让一个表格成为“用户”来处理它,并通过一个表来处理将用户连接到另一个用户的“朋友”关系。

对此的查询可以是:

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