我有三个桌子。在类别中,我有18条记录,在区域中,我有8条记录。
在client_profiles表中,区域字段可能看起来像[1]或[2]或[1,3]等
类别将类似于[1]或[2]或[1,3]等
client_profile必须至少具有一个区域和至少一个类别。
例如,我有100个client_profiles。每个人都属于一个区域,每个人至少具有一个类别。
让我说我在做Area = 1,我正在寻找所有类别(无论如何)以及每个类别中有多少client_profiles。
我如何实现他的目标:
等
下面的表格示例。
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);
答案 0 :(得分:0)
我想你想要这样的东西...
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