MySQL сравнить столбец json с массивом

Я работаю над запросом PHP PDO и хочу проверить, пересекается ли столбец JSON с массивом PHP.

$classes = [1,2,3,4,5,6,7];
|---------------------|------------------|
|      students       |       classes    |
|---------------------|------------------|
|          12         |      [1,3,6]     |
|---------------------|------------------|
|          13         |     [2,9,10]     |
|---------------------|------------------|
|          14         |     [9,8,10]     |
|---------------------|------------------|

например, в приведенном выше примере мне нужно, чтобы все ученики хотя бы с одним классом существовали в массиве $classes = [1,2,3,4,5,6,7];, поэтому в этом случае результат должен быть:

|---------------------|------------------|
|      students       |       classes    |
|---------------------|------------------|
|          12         |      [1,3,6]     |
|---------------------|------------------|
|          13         |      [2,9,10]    |
|---------------------|------------------|

Я попытался сделать массив в виде строки и сделать "% like%", но он не работает, потому что 'x,y,z' отсутствует в 'a,b,x,c'.

поэтому мне было интересно, можем ли мы сравнить два массива, хранящиеся в MySQL, как json, а другой - массив PHP. и мне нужно сделать это внутри запроса.

Благодарность

Итак, вы хотите сравнить два массива?

executable 18.12.2018 10:58

да, два массива хранятся в MySQL как json, а другой - массив PHP. и мне нужно сделать это внутри запроса

haffane hatim 18.12.2018 11:00

Не могли бы вы показать несколько примеров данных и кода? Также ожидаемый результат

executable 18.12.2018 11:03

@executable мне не нужно сравнивать только два массива php, проверьте мой комментарий, я отредактировал вопрос, чтобы объяснить больше, в любом случае спасибо

haffane hatim 18.12.2018 11:03

Вы имеете в виду $json_column = "['x','y','z']";?

revo 18.12.2018 11:04

получить JSON из базы данных, десериализовать его в массив PHP, а затем сравнить данные. Как вы думаете, почему вам «нужно» делать это именно в запросе? Все, что вам нужно сделать, это сравнить две строки, что не поможет вам сопоставить фактические элементы данных в строках.

ADyson 18.12.2018 11:06

@ADyson проверять мои обновления

haffane hatim 18.12.2018 11:16

В порядке. Проблема здесь в том, что ваши данные ненормализованы. Вы должны хранить список классов в отдельной таблице, где каждый идентификатор класса находится в отдельной строке таблицы с внешним ключом, возвращаемым студенту. Если вы когда-нибудь обнаружите, что храните несколько значений в одном поле, как это, то вы знаете, что допустили ошибку в дизайне своей базы данных. Если вы спроектируете его правильно нормализованным способом, тогда нужный вам запрос будет просто включать JOIN и простое предложение IN в разделе WHERE.

ADyson 18.12.2018 11:21

(P.S. Использование полей JSON отлично подходит для произвольного фрагмента информации, который вы просто хотите сохранить и получить, но не для вещей, которые являются частью фактической структуры и запросов ваших данных, таких как этот)

ADyson 18.12.2018 11:22

Да, @ADyson. Я согласен с вами, что данные денормализованы. но в моем случае я нашел такие данные, и это будет большой проблемой, чтобы нормализовать их и провести весь рефакторинг, поэтому я думал об этом как об обходе, но все же приятно иметь функцию в такой ситуации.

haffane hatim 18.12.2018 11:48
Стоит ли изучать 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 и хотите разрабатывать...
5
10
985
1

Ответы 1

Вы пробовали использовать JSON_EXTRACT (ссылка на сайт)?

Это должно позволить вам рассматривать его как массив.

DigitalOcean HowTo (я никак не связан с ними).

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