Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Заполнение значений селектора фильтра в один запрос возможно ли ? / 6 сообщений из 6, страница 1 из 1
01.07.2018, 13:27
    #39667992
anstrem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение значений селектора фильтра в один запрос возможно ли ?
Есть ли какое то решение проблемы фильтра ?

Есть товары, у них есть свойства по которым они отбираются фильтром, например одно из размер, допустим в вариантах от 1 до 100.

При выводе страницы каталога, нужно вывести в селекторе фильтра естественно только те варианты размеров, которые есть у товаров в данном разделе каталога.
Соответственно ищем есть ли в данном разделе товары с размером 1, если есть ok, если нет - убираем 1 из списка фильтра.
Ищем есть ли товары с размером 2 - нет, убираем из списка/
... и так до 100
И повторяем по всем параметрам фильтра по всем возможным их вариациям.

В результате получаем N*M обращений с запросами к базе с селектом по опциям всех товаров раздела и все это только лишь для того чтобы заполнить значениями селекторы фильтра.

Вопрос: а можно это все выше сделать как то за один запрос (или более их меньшее кол-во, а не за N*M) ?
...
Рейтинг: 0 / 0
01.07.2018, 13:33
    #39667995
anstrem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение значений селектора фильтра в один запрос возможно ли ?
В коде у меня это примерно вот так выглядит:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
                              foreach ($filter_values as $id => $filter_value) {
				$total = $filter_value["total"];
				if (!strlen($total)) {
					$list_id = $filter_value["list_id"];
					$where = $filter_value["where"];
					if (!$where) {
						$where = $filter_where_sql;
					}
					$where = str_replace("{value_id}", $list_id, $where);
					$where = str_replace("{table_value}", $list_id, $where);
					$sql  = get_filter_sql1($filter_type, $filter_from_sql, $filter_join_sql, $where, "", $show_sub_products, $category_path);
					if ($sql && $where) {
						$sql = $sql.' LIMIT 1';
						$total = get_db_value($sql);
					}
				}

				if ($total) {
				//	$filter_values[$id]["total"] = $total;
				} else {
					unset($filter_values[$id]);
				}
			}




Ну тут еще вычислялось сколько товаров каждого варианта опций есть (и в селекторе фильтра соотвественно показывалось что скажем размера 1 есть 10 вариантов, размера 2 - 15 и т.д. (потом закоментили ибо никакой реально полезной инфы в том что такого о размера есть столько ни для кого нет)

Но главный вопрос остался... как это оптимизировать чтобы убрать перебор всех вариантов всех опций в цикле
...
Рейтинг: 0 / 0
01.07.2018, 13:47
    #39667997
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение значений селектора фильтра в один запрос возможно ли ?
anstremЕсть товары, у них есть свойства по которым они отбираются фильтром, например одно из размер, допустим в вариантах от 1 до 100.Оторвано от реалий. Это пока не нарветесь на размер вроде 23,5 или 3/4" или XXL.

anstremВопрос: а можно это все выше сделать как то за один запросВ простейшем случае так примерно:
Код: sql
1.
SELECT DISTINCT `size` FROM /* таблица или группа таблиц */ WHERE /* тут параметры фильтра товаров, для которых надо взять размеры  */
...
Рейтинг: 0 / 0
01.07.2018, 14:07
    #39668002
anstrem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение значений селектора фильтра в один запрос возможно ли ?
vkleОторвано от реалий. Это пока не нарветесь на размер вроде 23,5 или 3/4" или XXL.


Ничего не оторвано, я просто для упрощения понимания написал, а так да у нас есть и те варианты что вы написали, т.е. значения вариантов в фильтре это конечно строки, а не цифры только...
Но это сути то не меняет, только усугубляет все еще..
...
Рейтинг: 0 / 0
01.07.2018, 14:14
    #39668004
anstrem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение значений селектора фильтра в один запрос возможно ли ?
vkleanstremЕсть товары, у них есть свойства по которым они отбираются фильтром, например одно из размер, допустим в вариантах от 1 до 100.Оторвано от реалий. Это пока не нарветесь на размер вроде 23,5 или 3/4" или XXL.

anstremВопрос: а можно это все выше сделать как то за один запросВ простейшем случае так примерно:
Код: sql
1.
SELECT DISTINCT `size` FROM /* таблица или группа таблиц */ WHERE /* тут параметры фильтра товаров, для которых надо взять размеры  */



Спасибо за подсказку :) Т.е. одним запросов вытаскиваем все уникальные значения размера всех нужных (подходящих под параметры) товаров... Да это видимо так как оно и должно было сделано, а не этот тупой вариант перебора, что там сейчас стоит...
...
Рейтинг: 0 / 0
01.07.2018, 14:18
    #39668005
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение значений селектора фильтра в один запрос возможно ли ?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Заполнение значений селектора фильтра в один запрос возможно ли ? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]