PostgreSQL:朋友的朋友,但我和那些朋友的关系

时间:2017-03-07 06:58:19

标签: postgresql

我有两个表,用户连接,他们有以下列:

pid_t output 1: 19876
pid_t output 2: 19876
pid_t output 3: 493972479
Parent exiting

我也有这种类型:

CREATE TABLE users (
    id serial PRIMARY KEY,
    name text
);

CREATE TABLE connections (
    from_id int REFERENCES users (id) ON DELETE CASCADE,
    to_id int REFERENCES users (id) ON DELETE CASCADE,
    status connection_status,
    PRIMARY KEY (from_id, to_id),
    UNIQUE (from_id, to_id)
);

连接表将为每个连接包含一行,因此如果user1与user2建立连接,则它将是一行,但这并不意味着user2与user1建立了连接。看它像Instagram或Twitter,你有追随者,你跟随的人。因此,如果数据库中有一行,其中user1为 from_id ,而user2为 to_id ,则表示user1正在关注user2。

问题

我想在一个查询中获得用户连接以及我与其连接的关系。例如,假设我是user1,我想找到user2的所有连接(已接受和未决的关注者和被关注者)以及我与user2的连接的连接,可以是accept,pending或null。

1 个答案:

答案 0 :(得分:0)

参见附件查询,我与用户加入了两次连接 1.具有connection.from_id的users.id,此连接将使user1所关注的所有用户具有以下状态 2.具有connection.to_id的users.id,此连接将使跟随user1的所有用户处于状态。

非常无能:如果user1有多个连接,您将为每个组合恢复行。

如果你想为每个用户获得一行,你可以使用windows函数,超前和滞后

select user.id as user,
       user.name,
       following.from_id as user_following,
       following.status as status_following,
       followees.from_id as user_followees,
       followees.status as status_followees
from users
left join connections following on users.id=following .from_id
left join connections followees on users.id=followees.from_id