【问题标题】:setting content to be viewable by friends only将内容设置为仅供朋友查看
【发布时间】:2009-07-23 14:56:02
【问题描述】:

假设我有一个包含内容的表格:

内容(contentID、标题、正文、隐私类型)

隐私类型可以是:

Public = 1(任何人都可以查看) Private = 2(只有作者可以查看) Friends = 3(只有朋友可以查看)

我有一个用户表:

用户(用户ID,用户名)

那么我有一个用户朋友的映射表:

好友(userID、friendID)

现在,当我列出所有内容时,它应该列出公开或我是该用户的朋友的内容(对于已登录的用户)

我将如何对此进行查询?

【问题讨论】:

    标签: asp.net sql-server


    【解决方案1】:

    您没有提供存储内容作者身份的字段,所以我假设它是content.author

    SELECT  *
    FROM    content
    WHERE   public = 1
            OR
            (
            public = 3
            AND EXISTS
            (
            SELECT  NULL
            FROM    friends
            WHERE   userId = @me
                    AND friendID = content.author
            )
            )
    

    ,或者更好:

    SELECT  *
    FROM    content
    WHERE   public = 1
    UNION ALL
    SELECT  *
    FROM    content
    WHERE   public = 3
            AND EXISTS
            (
            SELECT  NULL
            FROM    friends
            WHERE   userId = @me
                    AND friendID = content.author
            )
    

    ,如果您的author 字段是选择性的并且排序比过滤便宜。

    还要注意,如果您的友谊是对称关系(即,如果 userAuserB 的朋友,那么 userBuserA 的朋友),最好将其存储在这样的表中:

    userA  userB
    

    带有检查约束:

    userA < user B
    

    你总是把最少id的用户放在第一位。

    在这种情况下,您的查询如下:

    SELECT  *
    FROM    content
    WHERE   public = 1
    UNION ALL
    SELECT  *
    FROM    content
    WHERE   public = 3
            AND EXISTS
            (
            SELECT  NULL
            FROM    friends
            WHERE   userA = @me
                    AND userB = content.author
            UNION ALL
            SELECT  NULL
            FROM    friends
            WHERE   userB = @me
                    AND userA = content.author
            )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多