如果 JSON 列中存在值(user_id),则获取 mysql 行
Posted
技术标签:
【中文标题】如果 JSON 列中存在值(user_id),则获取 mysql 行【英文标题】:Get a mysql row if value (user_id) exists in JSON column 【发布时间】:2021-12-30 08:13:12 【问题描述】:我似乎不明白如何检查表中的 JSON 列中是否存在 ID。
让我告诉你我的布局是怎样的。
我有一个名为 teams 的表,该表当然包含我所有团队的列表。在此表中,我有一个名为“aMembers”的 JSON 类型的列。这包括一个带有该团队成员用户 ID 的 JSON。
示例 JSON:
"user_id" : [18, 55, 81, 26, 65]
现在假设我以用户 26 的身份登录。如果我想获取所有团队,其中 id 为 26 的用户存在于 JSON 类型的“aMembers”列中,我的查询会是什么样子?
我正在寻找的示例响应:
"Team1":
"name": "Team1",
"description": "Team1 Description",
"created_at": "2020-05-20T12:00:00.000Z",
"updated_at": "2020-05-20T12:00:00.000Z"
,
"Team88":
"name": "Team88",
"description": "Team88 Description",
"created_at": "2020-05-20T12:00:00.000Z",
"updated_at": "2020-05-20T12:00:00.000Z"
,
mysql 5.7 版
【问题讨论】:
那不是有效的 JSON,应该是"ids": [12,13,14,15]
。你试过什么?
@Firewizz 改变了我的例子。我的错,我亲手写了那个json。我现在还没有尝试太多。我主要是在谷歌上搜索,看看我是否能理解如何使用 JSON 列类型,但我似乎无法掌握它。
我正在寻找的示例响应 ???显示的所需响应无法从显示的微小源数据中获得。提供完整的示例 - 存储在 MySQl 中的源数据(CREATE TABLE + INSERT INTO)、外部输入标准/数据(带有数字数组的 JSON 对象?还有其他东西吗?)以及此源数据和标准的所需输出。还要指定精确 MySQL 版本。
@Akina 是的,我举例子的方式很糟糕。我的想法是这样的 SELECT * from TABLE where 26 EXISTS in JSON COLUMN?我知道这不是一个有效的查询,但这应该让我知道我在寻找什么。我将在一秒钟内添加版本。谢谢你告诉我。
您可以使用函数 JSON_CONTAINS()、JSON_OVERLAPS()、JSON_SEARCH() 测试显示的 JSON 中是否存在某些值...dev.mysql.com/doc/refman/8.0/en/json-function-reference.html
【参考方案1】:
我的愚蠢完全高估了这将是多么困难,只是害怕自己尝试太多。愚蠢的想法。我知道它是多么简单。
SELECT * FROM `table` WHERE JSON_CONTAINS(aMembers, '26');
完全可以使用。我的 aMebers 列的值为
[26, 66, 1]
(直接从列中复制)。
这工作并返回我需要的一切。感谢所有投篮并提供帮助的人。
在此处了解更多信息:https://www.sitepoint.com/use-json-data-fields-mysql-databases/
【讨论】:
以上是关于如果 JSON 列中存在值(user_id),则获取 mysql 行的主要内容,如果未能解决你的问题,请参考以下文章
IntegrityError:错误:“user_id”列中的空值违反非空约束
如何解压缩数据框列中存在的 json 的键,值将转换为键作为列,而使用 python 将其值转换为列?
检查一列中的值是不是存在于另一列中,如果存在,则将另一列中的值复制到新列中
如果包含 json 文档作为字符串,如何从 MySQL(5.6) 列中获取值