Получение значений Json данных внутри JSON массива в Mysql - PullRequest
0 голосов
/ 29 января 2020

У меня есть JSON столбец, содержащий массив JSON. Мой сценарий состоит в том, чтобы получить все записи, в которых присутствует значение url, равное '"example.com/user1"'. У меня проблемы с написанием запроса для этой операции.

Record1
 [
    {
        "id": "1",
        "firstname": "user1",
        "url": "example.com/user1"
    },
    {
        "id": "2",
        "firstname": "user2",
        "url": "example.com/user2"
    }
]
Record2
     [
        {
            "id": "1",
            "firstname": "user3",
            "url": "example.com/user3"
        },
        {
            "id": "2",
            "firstname": "user2",
            "url": "example.com/user2"
        }
    ]
......
......
......
Record10
     [
        {
            "id": "1",
            "firstname": "user10",
            "url": "example.com/user10"
        },
        {
            "id": "2",
            "firstname": "user1",
            "url": "example.com/user1"
        }
    ]

Выполненный мной запрос:

Select internal_id from users_dummy where JSON_EXTRACT(user_friends, '$[0].url') = "example.com/user1" or JSON_EXTRACT(user_friends, '$[1].url') = "example.com/user1";

Итак, o / p было: Record1, Record10

Это правильный способ поиска значений по записям? Заранее спасибо.

1 Ответ

1 голос
/ 30 января 2020

Вы можете использовать JSON_SEARCH следующим образом:

SELECT * 
FROM users_dummy 
WHERE JSON_SEARCH(user_friends, 'one', 'example.com/user1', NULL, '$[*].url') IS NOT NULL

демо на dbfiddle.uk

Если вы используете объекты вместо массивов, вы можете использовать следующее решение:

SELECT * 
FROM users_dummy 
WHERE JSON_SEARCH(user_friends, 'one', 'example.com/user1', NULL, '$.*.url') IS NOT NULL

демо на dbfiddle.uk

...