Запрос соединения MySQL с типами полей JSON - PullRequest
0 голосов
/ 20 марта 2019

У меня есть три таблицы.В категориях у меня 18 записей, а в областях - 8 записей.

В таблице client_profiles поле областей может выглядеть как [ 1 ] или [2] или [1,3] и т. Д.

категории будут выглядеть как [ 1 ] или [2] или [1,3] и т. Д.

В файле client_profile должна быть хотя бы одна область икак минимум одна категория.

Скажем, у меня есть 100 client_profiles, например.Каждый из них принадлежит к области, и у каждой есть по крайней мере одна категория.

Допустим, я делаю область = 1, я ищу все категории (независимо) и сколько профилей client_profiles в каждой категории.

Как мне добиться следующих действий:

results example

и т. Д.

в приведенных ниже примерах.

CREATE TABLE categories (
id INT AUTO_INCREMENT PRIMARY KEY,
category_description VARCHAR(255) NOT NULL UNIQUE,
isActive boolean NOT NULL DEFAULT true
);

CREATE TABLE areas (
id INT AUTO_INCREMENT PRIMARY KEY,
area_description VARCHAR(255) NOT NULL UNIQUE,
isActive boolean NOT NULL DEFAULT true
);

CREATE TABLE client_profiles (
id INT AUTO_INCREMENT PRIMARY KEY,
businessName VARCHAR(60) NOT NULL UNIQUE,
first_name VARCHAR(60) NOT NULL,
last_name VARCHAR(60) NOT NULL,
mob_no VARCHAR(13) NOT NULL,
email VARCHAR(30) NOT NULL,
areas JSON NOT NULL,
catarea JSON NOT NULL,
);

select id, areas 
from client_profiles
where JSON_CONTAINS(areas, '1',"$");

INSERT INTO categories (category_description, isActive) values 
('Accomodation', true),
('Automative', true),
('Adult', true),
('Arts & Crafts', true),
('Events', true),
('Financial', true),
('Garden', true),
('House & Home', true),
('IT & Technology', true),
('Kids', true),
('Legal', true),
('Medical', true),
('Pets', true),
('Pregnancy(Babies)', true),
('Property', true),
('Travel & Tourism', true),
('Transport', true),
('Wellness & Beauty', true);

1 Ответ

0 голосов
/ 20 марта 2019

Я думаю, вы хотите что-то вроде этого ...

SELECT
  c.id,
  COUNT(p.id)
FROM
  categories        c
LEFT JOIN
  client_profiles   p
    ON  JSON_CONTAINS(p.areas,      '1',                    '$')
    AND JSON_CONTAINS(p.categories, CAST(c.id AS CHAR(32)), '$')
GROUP BY
  c.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...