You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅在登录用户为页面创建者时优先展示block=1的页面成员?

解决方案:带权限控制的页面成员查询

没问题,我来帮你搞定这个页面成员的权限查询和排序需求。咱们先明确核心逻辑,再写出对应的SQL:

核心需求回顾

  • 当登录用户是页面创建者时:展示所有成员,且优先显示需要授权(block=1)的成员
  • 当登录用户不是页面创建者时:仅展示已授权(block=0)的成员

最终SQL实现

我们需要传入当前登录用户的ID(这里用@current_user_id作为参数,你可以替换成实际业务中获取登录用户ID的方式),SQL如下:

SELECT 
    p.user AS page_owner,
    p.title,
    pm.user AS member_user_id,
    pm.block
FROM page_members pm
INNER JOIN page p ON pm.member = p.id
WHERE 
    pm.member = 100 -- 替换为目标页面ID
    AND (
        -- 情况1:当前用户是页面创建者,允许所有成员
        p.user = @current_user_id
        -- 情况2:非创建者,仅允许已授权成员
        OR pm.block = 0
    )
-- 排序逻辑:仅创建者登录时,优先展示需授权的成员
ORDER BY 
    CASE 
        WHEN p.user = @current_user_id THEN pm.block DESC
        ELSE pm.block
    END;

代码细节解释

  1. 关联表选择:用INNER JOIN而非LEFT JOIN,因为我们必须获取页面的创建者信息来做权限判断,无效的页面记录没有意义。
  2. WHERE条件过滤:通过OR分支实现两种权限场景的过滤:
    • 如果当前用户是页面创建者,直接放行所有成员记录
    • 如果不是创建者,只保留block=0的已授权成员
  3. 排序控制:用CASE语句实现动态排序:
    • 仅当当前用户是创建者时,按block降序排列(让block=1的需授权成员排在最前面)
    • 非创建者登录时,因为结果都是block=0,排序不会产生实际影响,但保持语法完整性

可选优化

如果需要让相同状态的成员有更稳定的排序(比如按加入时间、成员ID),可以在ORDER BY里补充字段:

ORDER BY 
    CASE 
        WHEN p.user = @current_user_id THEN pm.block DESC
        ELSE pm.block
    END,
    pm.id ASC; -- 按成员记录ID升序排列

内容的提问来源于stack exchange,提问作者RGS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:50:52