我的系统使用具有多个元素的用户表,包括其在线状态。现在我想添加一个功能,这样每个用户都可以将一个联系人,即现有用户从数据库添加到他们的朋友或联系人列表中,显示他们的姓名和在线状态。但是,我需要在联系人列表中更新联机状态中的任何更改,因此创建新表将无济于事。
我一直在研究这方面的观点,但对数据库没有太多的经验,我想知道这是否是正确的方法,以及如何做到这一点的更多细节。
以下是我想到的步骤:
我不确定这是否可以通过观看,所以如果不是,可以帮助我。
感谢。
答案 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