一、GROUP_CONCAT
手动查出需要用于查询、展示的字段
用法:(需要GROUP BY) 将每个岗位下的姓名合并为一个以逗号分隔的字符串
SELECT GROUP_CONCAT(DISTINCT u.nickName SEPARATOR ',')
FROM system_post AS post
JOIN system_user_post AS up ON post.id = up.post_id
WHERE .......
-- DISTINCT 可去除重复的值
注:GROUP_CONCAT
的结果有长度限制,默认情况下是 1024 个字符,可以通过调整 group_concat_max_len
系统变量来增加这个限制
二、JSON_CONTAINS
JSON_CONTAINS
是 MySQL 中用于检查一个 JSON 文档是否包含另一个 JSON 文档的函数。它可以用于查询和过滤 JSON 数据类型的字段。
用法:(需要GROUP BY)
select * from table where JSON_CONTAINS(notice_emp, #{noticeId})
select * from table where JSON_CONTAINS(person_ids, CAST(#{personId} AS JSON), '$') // xml中
这里会返回所有 notice_emp
中包含 noticeId的行。
三、FIND_IN_SET
select COUNT(*) from table
where status = '0' AND deleted = '0'
AND (
person_id = #{id}
OR FIND_IN_SET(#{id}, REPLACE(REPLACE(person_id, '[', ''), ']', '')) > 0
)
-- 数据库存储person_id字段格式为Json:1024 或者[1024,1,2]
FIND_IN_SET
返回 ID 在列表中的位置(从 1 开始),所以结果大于 0 表示 ID 存在于列表中。
注:最终得到的结果是一个纯粹的逗号分隔字符串 1,2,3
,适合使用 FIND_IN_SET
函数进行处理
或者直接用JSON_CONTAINS
select COUNT(*) from table
where status = '0' AND deleted = '0'
AND (
person_id = #{id}
OR JSON_CONTAINS(to_do_person_id, #{personId}, '$') // 数据库中
OR JSON_CONTAINS(to_do_person_id, CAST(#{personId} AS JSON), '$') // xml中
)
-- 数据库存储person_id字段格式为:1024 或者[1024,1,2]
FIND_IN_SET
返回 ID 在列表中的位置(从 1 开始),所以结果大于 0 表示 ID 存在于列表中。
注:最终得到的结果是一个纯粹的逗号分隔字符串 1,2,3
,适合使用 FIND_IN_SET
函数进行处理