Как использовать подзапрос JSON в выражении MySQL JSON - PullRequest
0 голосов
/ 31 марта 2020

Следующий сценарий: у меня есть JSON столбец данных с именем 'address' в моей таблице sql. Я вставил в него массив объектов. Позже мне нужно будет выбрать весь объект массива, выяснив, какой type в запросе будет передан. Поэтому, если я передаю { "type": "shipping" } своему REST API, я бы хотел получить все данные в объекте с помеченным типом «shipping».

Просто один из различных JSON форматов, которые я пробовал:

{
    "address": [
        {
            "type": "shipping",
            "street": "streetName",
            "streetNumber": "1"
        },
        {
            "type": "billing",
            "street": "streetName",
            "streetNumber": "2"
        },
        {
            "type": "custom",
            "street": "streetName",
            "streetNumber": "3"
        }
    ]
}

Вот как данные сохраняются в одном столбце:

[
{"type": "custom", "street": "streetName", "streetNumber": "1"}, 
{"type": "shipping", "street": "streetName", "streetNumber": "2"}, 
{"type": "billing", "street": "streetName", "streetNumber": "3"}
]

Итак, я попытался сделать магию c с функцией JSON MySQL. Такие запросы, как

SELECT JSON_SEARCH(address, 'one', 'shipping')
FROM user_data;

, работают отлично, но это не тот результат, который мне нужен. Поэтому я подумал об использовании подзапросов

SELECT JSON_EXTRACT(address, (SELECT JSON_SEARCH(address, 'one', 'shipping')))
FROM user_data
WHERE user_id = 1;

, но это просто заканчивается "неверным JSON выражением пути" (Код ошибки: 3143). Я уже пробовал с разными запросами и JSON форматами данных, например, вместо этого, используя массив. Я пытался вставить данные вроде

"address": {
    "shipping": {
        "street": ...
        .
     },
    "billing": {
        "street": ...
        .
    }
}

Теперь я просто запутался, и кажется, что есть только mysql документация, которая сейчас не помогает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...