@dzavatra

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

Есть две таблицы:

1) Таблица pairs со столбцом pair состоящий из массивов
--------------------------------------------------
|   pair 
--------------------------------------------------
|  ["ананас","апельсины"]       
|  ["ананас","арбуз"]                      
|  ["ананас","бананы"]                     
|  ["ананас","баранина"]                 
|  ["ананас","батон"]                          
|  ...............                     
|  ["шоколад черный","яблоки"]     
|  ["энергетический напиток","яблоки"] 
---------------------------------------------------


2) Таблица orders со столбцом order_list состоящий из массивов

--------------------------------------------------
|   order_list
--------------------------------------------------
|   ["сливки","бананы"]
|   ["энергетический напиток","лимонад","горох","макароны"]
|   ["сок апельсиновый","масло подсолнечное","курица"]
|   ["груши","хлеб","батон"]              
|   ...............                     
|   ["курица","сушки","батон"]
|   ["рыба соленая","баранина","груши","чай черный листовой"]
---------------------------------------------------


Необходимо определить, сколько раз каждая пара продуктов из таблицы pairs встречается в массивах из столбца order_list. Понимаю, что нужно использовать group by, count и, возможно, оператор " @> ", но нет понимания, как связать таблицы и считать вхождения одного массива в другой.

Итоговая таблица должна выглядеть так:

--------------------------------------------------
|   pair                             |  count_pair
--------------------------------------------------
|   ["апельсины","овсянка"]          |  56
|   ["батон","йогурт"]               |  51
|   ["вафли","лимонад"]              |  39
|   ["йогурт","мармелад"]            |  25
|   ...............   
|   ["кофе растворимый","мандарины"] |  1
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
@alexalexes
С помощью функции json_to_recordset проводите нормализацию таблиц, чтобы на выходе pair получилась вот такая псевдотаблица-выборка:
pair
id_group, name
1, "ананас",
1, "апельсины",
2, "ананас",
2, "арбуз"
...
Дальше тоже самое делаете с order_list.
Ну, а дальше все приведено в 3-ю нормальную форму, можно, наконец, использовать SQL-ные сравнения/соединения этих псевдовыборок и высчитывать кол-ва того-сего.
PS: Такое решение годится как разовое для получения результата, например, если вам нужно срочно сделать нестандартный отчет для руководства, а структура таблиц спроектирована из рук вон плохо.
Нужно изначально планировать структуру базы так (приводить к 3-й нормальной форме), чтобы не прибегать к декомпозиции полей с помощью функций JSON, если компоненты внутри JSON будут использоваться для соединения между таблицами.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы