You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MySQL 5.7中如何查询JSON列包含指定user_id的所有团队记录

解决方案:查询MySQL 5.7中JSON数组包含指定ID的团队

针对你的需求,在MySQL 5.7里可以借助内置的JSON函数轻松实现,直接上可行的查询语句,再给你拆解细节:

基础查询:获取所有符合条件的团队数据

如果只是要获取所有包含用户ID 26的团队记录,用JSON_CONTAINS函数就可以搞定:

SELECT * 
FROM teams
WHERE JSON_CONTAINS(aMembers->'$.user_id', CAST(26 AS JSON));

语句细节解释:

  • aMembers->'$.user_id':通过JSON路径表达式,精准提取出aMembers列中存储用户ID的数组(也就是示例里[18, 55, 81, 26, 65]这部分内容)。
  • CAST(26 AS JSON):把用户ID转换成JSON数字类型,确保和数组里的元素类型完全匹配——如果直接传字符串'26',可能会因为类型不一致导致匹配失败,这一步很关键。
  • JSON_CONTAINS:检查提取出的数组是否包含指定的JSON值,返回1表示存在,0表示不存在,以此作为筛选条件。

生成你期望的JSON格式结果

如果你需要直接得到示例中那种以团队名为键、团队详情为值的JSON结构,可以用JSON_OBJECTAGG函数(注意:这个函数从MySQL 5.7.22版本开始支持):

SELECT JSON_OBJECTAGG(name, JSON_OBJECT(
    'name', name,
    'description', description,
    'created_at', created_at,
    'updated_at', updated_at
)) AS team_data
FROM teams
WHERE JSON_CONTAINS(aMembers->'$.user_id', CAST(26 AS JSON));

语句细节解释:

  • JSON_OBJECT(...):把每个团队的namedescription等字段组装成一个独立的JSON对象,比如{"name": "Team1", "description": "Team1 Description", ...}
  • JSON_OBJECTAGG(name, ...):将所有团队的JSON对象聚合起来,以团队的name作为键,最终生成你需要的大JSON结构。

如果你的MySQL 5.7版本低于5.7.22,JSON_OBJECTAGG不支持,建议先执行基础查询获取所有符合条件的团队数据,再在应用代码里组装成期望的JSON格式,这样更稳妥。

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

火山引擎 最新活动