![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 25.11.2022
Сообщений: 3
|
![]()
Я пишу фильтр и застрял на моменте когда выбирают производителя я могу оставить доступные атрибуты для дальнейшей фильтрации то есть я оставляю атрибуты при сущие выбранному производителю но после выбора любого атрибута из оставшихся фильтр сбивается и раскрывает другие атрибуты не присущие этому производителю нужно что бы при выборе оставшихся атрибутов происходило фильтрация атрибутов на уменьшение оставшихся к примеру вот мой запрос
SELECT DISTINCT pa.text as attr_value, attr_d.name as attr_name, attr.filter_showed as attr_show, fil_t.name as attr_type, attr.attribute_id as attribute_id, COUNT((SELECT pr2.product_id FROM product pr2 WHERE pr2.product_id = pr.product_id GROUP BY pr2.product_id )) AS stock FROM product_to_category pc LEFT JOIN product pr ON (pc.product_id = pr.product_id) LEFT JOIN product_attribute pa ON (pc.product_id = pa.product_id) LEFT JOIN attribute attr ON (pa.attribute_id = attr.attribute_id) LEFT JOIN attribute_description attr_d ON (attr.attribute_id = attr_d.attribute_id) LEFT JOIN filter_type fil_t ON (attr.filter_type_id = fil_t.id) WHERE pc.category_id = '1227' AND attr.filter_on = 1 AND pr.status = 1 AND (pr.manufacturer_id = '13') GROUP BY pa.attribute_id, pa.text ORDER BY attr_d.name, stock DESC, attr_value ASC" Здесь показано как я фильтрую по производителю а как фильтровать по атрибутам если я пропишу атрибуты как производителя тогда все атрибуты станут не доступные кроме того которого я выбрал всю голову сломал как сделать не знаю могу показать сайт ! |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,065
|
![]()
одним SQL тут не обойтись
Необходимо динамически формировать сам SQL запрос с помощью того ЯП в котором делаете проект типа передали 1 параметр SQL = ..... where param1 = 1 передали два (уточнение) SQL = ..... where (param1 = 1) && (param2 = 2) Последний раз редактировалось ADSoft; 25.11.2022 в 12:20. |
![]() |
![]() |
![]() |
#3 | |
Новичок
Джуниор
Регистрация: 25.11.2022
Сообщений: 3
|
![]() Цитата:
public function getAllAttribute($category_id, $filter_data) { $sql = " SELECT DISTINCT pa.text as attr_value, attr_d.name as attr_name, attr.filter_showed as attr_show, fil_t.name as attr_type, attr.attribute_id as attribute_id, COUNT((SELECT pr2.product_id FROM product pr2 WHERE pr2.product_id = pr.product_id GROUP BY pr2.product_id )) AS stock FROM product_to_category pc LEFT JOIN product pr ON (pc.product_id = pr.product_id) LEFT JOIN product_attribute pa ON (pc.product_id = pa.product_id) LEFT JOIN attribute attr ON (pa.attribute_id = attr.attribute_id) LEFT JOIN attribute_description attr_d ON (attr.attribute_id = attr_d.attribute_id) LEFT JOIN filter_type fil_t ON (attr.filter_type_id = fil_t.id) WHERE pc.category_id = '" . (int) $category_id . "' AND attr.filter_on = 1 AND pr.status = 1 "; if (!empty($filter_data['filter_filter'])) { $index_man = 0; if (isset($filter_data['filter_filter'][0])) { if ($filter_data['filter_filter'][0]['form'] === 'manufacturer') { $sql .= " AND ("; foreach ($filter_data['filter_filter'] as $key => $value) { if ($value['form'] === 'manufacturer') { if ($index_man == 0) { $sql .= "pr.manufacturer_id = '" . $this->db->escape($value['id']) . "'"; } else { $sql .= " OR pr.manufacturer_id = '" . $this->db->escape($value['id']) . "'"; } $index_man = $index_man + 1; } } $sql .= ")"; } } } $sql .= " GROUP BY pa.attribute_id, pa.text ORDER BY attr_d.name, stock DESC, attr_value ASC"; $query = $this->db->query($sql); $result = $this->groupByKey($query->rows); return $result; } |
|
![]() |
![]() |
![]() |
#4 | |
Новичок
Джуниор
Регистрация: 25.11.2022
Сообщений: 3
|
![]() Цитата:
public function getAllAttribute($category_id, $filter_data) { $sql = " SELECT DISTINCT pa.text as attr_value, attr_d.name as attr_name, attr.filter_showed as attr_show, fil_t.name as attr_type, attr.attribute_id as attribute_id, COUNT((SELECT pr2.product_id FROM product pr2 WHERE pr2.product_id = pr.product_id GROUP BY pr2.product_id )) AS stock FROM product_to_category pc LEFT JOIN product pr ON (pc.product_id = pr.product_id) LEFT JOIN product_attribute pa ON (pc.product_id = pa.product_id) LEFT JOIN attribute attr ON (pa.attribute_id = attr.attribute_id) LEFT JOIN attribute_description attr_d ON (attr.attribute_id = attr_d.attribute_id) LEFT JOIN filter_type fil_t ON (attr.filter_type_id = fil_t.id) WHERE pc.category_id = '" . (int) $category_id . "' AND attr.filter_on = 1 AND pr.status = 1 "; if (!empty($filter_data['filter_filter'])) { $index_man = 0; if (isset($filter_data['filter_filter'][0])) { if ($filter_data['filter_filter'][0]['form'] === 'manufacturer') { $sql .= " AND ("; foreach ($filter_data['filter_filter'] as $key => $value) { if ($value['form'] === 'manufacturer') { if ($index_man == 0) { $sql .= "pr.manufacturer_id = '" . $this->db->escape($value['id']) . "'"; } else { $sql .= " OR pr.manufacturer_id = '" . $this->db->escape($value['id']) . "'"; } $index_man = $index_man + 1; } } $sql .= ")"; } } } $sql .= " GROUP BY pa.attribute_id, pa.text ORDER BY attr_d.name, stock DESC, attr_value ASC"; $query = $this->db->query($sql); $result = $this->groupByKey($query->rows); return $result; } |
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,065
|
![]()
Раз понятно - делайте, в чем вопрос то? И зачем писать по два раза? У нас не Баден-Баден
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Провести фильтрацию по дате | _Dianka_ | Помощь студентам | 0 | 28.12.2016 17:25 |
Обойти фильтрацию | Utkin | Свободное общение | 20 | 10.09.2014 17:32 |
Макрос на фильтрацию данных | Hoochara | Microsoft Office Excel | 0 | 04.08.2011 10:07 |
D7+Paradox, как сделать фильтрацию данных? | nursak | Помощь студентам | 7 | 27.05.2011 19:51 |
Как произвести фильтрацию данных | Dronlion | Microsoft Office Excel | 2 | 12.04.2011 22:48 |