【问题标题】:JSON_CONTAINS string everywhere in the structure结构中所有位置的 JSON_CONTAINS 字符串
【发布时间】:2019-06-28 08:16:13
【问题描述】:

我的 MySQL 数据库 (5.7.25) 中有一个 JSON 列,它可以包含任何类型的 JSON 结构(因此我没有任何所有行共有的属性)

如何通过 laravel ELOQUENT 执行查询,以搜索与 JSON 列的属性之一中的字符串匹配的行?

我试过这个:

JSON_CONTAINS(`payload`, "key")

但是 mySQL 抛出以下异常:

Invalid JSON text in argument 2 to function json_contains: "Invalid value." at position 0

例如如果结构类似这样:

{first_name:"John", "last_name":"Smith", "company":"Demo Company"}

我想在任何属性中搜索包含单词“Demo”的所有行(如果字符串是 json 属性值的子字符串)。

我发现的唯一工作方式如下:

JSON_SEARCH(payload, 'one', '%Demo%') IS NOT NULL

但它似乎有点慢。所以我问是否有更快的方法

【问题讨论】:

标签: php mysql json laravel eloquent


【解决方案1】:

帖子标题与实际问题不同,但对于想知道如何在 JSON 中的任何位置进行搜索的人,您可以简单地使用 LIKE。

给定一个 json:

 {
    "rule": 4,
    "triggers": {
        "then": {
            "field": "Sessions_Remaining__c",
            ...
        },
        "when": ""
    }
}

你不会通过使用获得任何价值:

SELECT * WHERE JSON_CONTAINS(json,'"Sessions_Remaining__c"')

所以你可以改用:

SELECT * WHERE json LIKE '%"Sessions_Remaining__c"%';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 2017-11-20
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    相关资源
    最近更新 更多