需求:mysql查询对应用户的通知,如:数据库通知角色字段数据为a,b,c;登录用户角色为a,d,要求登录用户角色a,d中有一个角色在通知角色中就展示
SELECT *
FROM announcement_notice t
WHERE
(type = 1
OR
<foreach collection="roles" item="role" index="index" separator="OR">
FIND_IN_SET(#{role}, notice_roles)
</foreach>
)
and t.id NOT IN (
SELECT t1.notice_id
FROM notice_confirm t1
LEFT JOIN announcement_notice t2 ON t1.notice_id = t2.id
WHERE t1.confirm_person_id = #{personId}
)
ORDER BY t.create_time DESC
FIND_IN_SET函数用于查找角色在通知角色列表中的位置,如果找到则返回大于0的值,否则返回0。使用OR逻辑操作符将两个FIND_IN_SET函数的结果连接起来,只要其中一个函数返回大于0的值,即表示登录用户角色在通知角色中