【问题标题】:Get a mysql row if value (user_id) exists in JSON column如果 JSON 列中存在值(user_id),则获取 mysql 行
【发布时间】: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

标签: mysql sql json


【解决方案1】:

我的愚蠢完全高估了这将是多么困难,只是害怕自己尝试太多。愚蠢的想法。我知道它是多么简单。

SELECT * FROM `table` WHERE JSON_CONTAINS(aMembers, '26');

完全可以使用。我的 aMebers 列的值为

[26, 66, 1]

(直接从列中复制)。

这工作并返回我需要的一切。感谢所有投篮并提供帮助的人。

在此处了解更多信息:https://www.sitepoint.com/use-json-data-fields-mysql-databases/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2023-03-03
    • 2017-04-03
    • 1970-01-01
    • 2015-05-13
    • 2023-03-31
    • 2019-05-16
    相关资源
    最近更新 更多