Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица с товарами goods, она связана с таблицей сategories (многие ко многим), также она связана с таблицей filters_values (многие ко многим). Каждый товар может иметь несколько категорий и фильтров. Нужно создать запрос для получения всех товаров при заданых аlias категории и id-шников значений фильтров. Буду благодарен за помощь
Неактивен
проиллюстрируйте на примере с тестовыми данными в виде
create table ..
insert into ..
и какой результат должен вернуть запрос
Неактивен
CREATE TABLE goods (
id int NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
PRIMARY KEY (id)
);
insert into goods(name) values('product1');
insert into goods(name) values('product2');
insert into goods(name) values('product3');
insert into goods(name) values('product4');
insert into goods(name) values('product5');
insert into goods(name) values('product6');
insert into goods(name) values('product7');
insert into goods(name) values('product8');
CREATE TABLE categories (
id int AUTO_INCREMENT,
title varchar(255),
alias varchar(255),
PRIMARY KEY (id)
);
insert into categories(title, alias) values('Категория 1', 'cat_1');
insert into categories(title, alias) values('Категория 2', 'cat_2');
insert into categories(title, alias) values('Категория 3', 'cat_3');
CREATE TABLE goods_category (
product_id int,
category_id int,
PRIMARY KEY (product_id, category_id)
);
insert into goods_category(product_id, category_id) values (1,1);
insert into goods_category(product_id, category_id) values (2,1);
insert into goods_category(product_id, category_id) values (3,2);
insert into goods_category(product_id, category_id) values (4,1);
insert into goods_category(product_id, category_id) values (5,1);
insert into goods_category(product_id, category_id) values (6,1);
insert into goods_category(product_id, category_id) values (7,1);
insert into goods_category(product_id, category_id) values (8,1);
CREATE TABLE filter_values (
id int AUTO_INCREMENT,
value varchar(100),
PRIMARY KEY (id)
);
insert into filter_values(value) values (41);
insert into filter_values(value) values (42);
insert into filter_values(value) values (43);
insert into filter_values(value) values (44);
insert into filter_values(value) values ('blue');
insert into filter_values(value) values ('red');
insert into filter_values(value) values ('orange');
CREATE TABLE goods_filter_values (
product_id int,
value_id int,
PRIMARY KEY (product_id, value_id)
);
insert into goods_filter_values(product_id, value_id) values (1,1);
insert into goods_filter_values(product_id, value_id) values (1,2);
insert into goods_filter_values(product_id, value_id) values (1,3);
insert into goods_filter_values(product_id, value_id) values (1,6);
insert into goods_filter_values(product_id, value_id) values (2,7);
insert into goods_filter_values(product_id, value_id) values (3,2);
insert into goods_filter_values(product_id, value_id) values (3,3);
insert into goods_filter_values(product_id, value_id) values (3,5);
insert into goods_filter_values(product_id, value_id) values (3,6);
insert into goods_filter_values(product_id, value_id) values (4,1);
insert into goods_filter_values(product_id, value_id) values (4,7);
insert into goods_filter_values(product_id, value_id) values (5,1);
insert into goods_filter_values(product_id, value_id) values (5,2);
insert into goods_filter_values(product_id, value_id) values (6,3);
insert into goods_filter_values(product_id, value_id) values (6,4);
insert into goods_filter_values(product_id, value_id) values (6,7);
insert into goods_filter_values(product_id, value_id) values (7,1);
insert into goods_filter_values(product_id, value_id) values (7,6);
insert into goods_filter_values(product_id, value_id) values (8,2);
insert into goods_filter_values(product_id, value_id) values (8,6);
Результат должен быть следующим: если фильтры не применены, то должны быть выведены все товары из заданой категории, если применён какойто фильтр (или несколько фильтров) должны быть выведены товары которые имеют заданые фильтры
Неактивен
select goods.* from goods join goods_category on goods.id=product_id join categories on category_id= categories.id where alias='заданая категория'
при наличии фильтров товары должны удовлетворять всем параметрам или части? если первое, то см эту тему
Неактивен
если заданные фильтры то должны отображаться только те товары к которым привязаны заданные (все) фильтры. Например в товара А есть фильтры з id 1 2 3 4 5, в товара B id - 2 3. Если заданные фильтры с id 2 3 то отображаются оба товара, а если к примеру 1 2 3 то только товар А
Неактивен
спасибо)
Неактивен