如果 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) 列中获取值

如何遍历列,检查任何列中是不是存在特定值,改变新列并输入 1 如果存在,如果不存在则输入 0?

检查 B 列中的值是不是存在于 A 列中