Mysql json где в

У меня есть две таблицы, как показано ниже. Но у меня возникли проблемы с запросом. Я хочу запросить все сообщения, член группы которых равен can_view_group, а тип столбца can_view_group - JSON.

Я знаю только, что JSON_CONTAINS и WHERE (столбец) IN могут помочь мне выполнить работу, но я не могу заставить ее работать. Как я могу заставить это работать?

Спасибо.

P.S. Мне просто нужен простой код SQL, поскольку он должен быть самым простым, когда я применяю его к PHP-коду или к чему-либо еще.


                post
----------------------------------------
     post_id    |    can_view_group    |
----------------------------------------
        1       |   ["1","2","3"]      |
----------------------------------------

              member_group
----------------------------------------
    member_id   |       group_id       |
----------------------------------------
      123       |           1          |
----------------------------------------
      123       |           2          |
----------------------------------------


Лучше нормализовать структуру данных

HTMHell 02.07.2018 17:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Наиболее простым является использование нескольких вложенных функций REPLACE для получения строки, разделенной запятыми, и денормализованной функции MySQL FIND_IN_SET, которая работает со строкой, разделенной запятыми.

Запрос

SELECT 
 *
FROM 
 post 
INNER JOIN
 member_group
ON
 FIND_IN_SET(member_group.group_id , REPLACE(REPLACE(REPLACE(post.can_view_group, '"', ''), '[', ''), ']', ''))

см. демонстрацию http://sqlfiddle.com/#!9/37e997/5

С одной стороны, вы никогда не сможете использовать индекс при таком подходе.

Лучшим вариантом по-прежнему является нормализация, но для этого обязательно потребуется изменение приложения.

Большое спасибо! Это просто потрясающе. Какой была бы структура, если бы я хотел ее нормализовать для этой ситуации?

tommyvca 02.07.2018 18:05

Другие вопросы по теме