powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка продуктов по свойствам
12 сообщений из 37, страница 2 из 2
Выборка продуктов по свойствам
    #38350489
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто НЕ проблема. Хоть 200 JOIN-ов.Увы, максимум 61.
...
Рейтинг: 0 / 0
Выборка продуктов по свойствам
    #38350492
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerИ еще, следите за смыслом. Неотъемлимые свойства "отъемлять" не надо. Особенно когда они один фиг - числа. За каким выносить диагонали, диаметры и длину члена в справочник?.

Блин, ну надо ему.

Вполне логично в некоторых областях. НАпример, покрышки -- они не бывают произвольных размеров, логично завести все их предопределённые размеры в справочник.

Конечно, не все свойства имеют такие ограничения, это я согласен. Но это уж пусть автор сам решает.
...
Рейтинг: 0 / 0
Выборка продуктов по свойствам
    #38350493
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftMasterZivЭто НЕ проблема. Хоть 200 JOIN-ов.Увы, максимум 61.

Ну, ок, значит 20 или 30 свойств можем задать в фильтре, не так и мало.
...
Рейтинг: 0 / 0
Выборка продуктов по свойствам
    #38350580
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Покрышки связаны непосредственно с дисками и вторично с характеристиками автомобиля как то масса, скорость. Диски связаны со ступицей, ступица связана с подвеской, подвеска связана с кузовом и так далее и чтобы вывести весь этот bill of material нам тут жизни не хватит.

С чем интересно связана диагональ телевизора? С аквариумом, да? :)

В первом случае у нас реляционная бд во всей красе, во втором извращение. Premature optimization, короче. Вместо того, чтобы подумать как упростить, автор начитавшись предисловий начал дробить индивидуальность и сам себя загоняет в подполье.

Короче, забейте предложенный вариант немногими данными и соедините как процитировано. Посмотрите что получилось и тогда делайте выводы. Какие к черту навороченные джойны, когда прямиком надо соединить три таблицы.

И вообще, кто ж автору мешает проиндексировать эти диагонали из живых данных и вывести оглавление списком? В том числе той тетки - чтобы выбирала ближайшее значение, если совсем тупая.
...
Рейтинг: 0 / 0
Выборка продуктов по свойствам
    #38350585
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот если бы для телевизоров продавались глицериновые линзы как это было в прошлом, тогда я понимаю - пришлось бы сводить диагонали линз и экранов. Но и тогда можно было бы живо подобрать линзу под ящик задав порог отклонения (threshold) запрашивая данные прямо из таблей ТВ и ЛИНЗА.

Ну допустим применительно к анальным покрышкам для телефонов это справедливо. Но там же нет строгих критериев. Длина-ширина подходит - значит мое. Достаточно обмерить все телефоны и сравнить с тем какие есть размеры пленочек для экранов.
...
Рейтинг: 0 / 0
Выборка продуктов по свойствам
    #38350665
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deblogger...

Ты вот сейчас с кем разговаривал ?
...
Рейтинг: 0 / 0
Выборка продуктов по свойствам
    #38350987
ExOLiNe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivExOLiNeВроде бы нашел решение:

Код: sql
1.
2.
3.
4.
5.
6.
SELECT CASE WHEN COUNT( p_id ) =2
THEN p_id
END FROM `test_product_features` 
WHERE (ff_id =1 && fv_id =1
) || ( ff_id =2 && fv_id =3 ) 
GROUP BY p_id



Производится поиск по таблице-связке всех возможных совпадений через ИЛИ. Потом полученные строки группируются по p_id и подсчитывается количество p_id из результата. Если count(p_id) равен количеству запрашиваемых из базы свойств - значит у продукта есть все запрашиваемые свойства. Но это конечно только подзапрос, но самый важный.

Это неверный ответ. В смысле, запрос.
Можно хотя бы аргументировать?
...
Рейтинг: 0 / 0
Выборка продуктов по свойствам
    #38351000
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автору:

ExOLiNeCygapb-007так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * 
from `test_products` p
where p.`p_id` in (
   select pf.`p_id`--, ff.`ff_name`,fv.`fv_value`
   from `test_feature_fields` ff
   join `test_feature_values` fv on fv.`ff_id`=ff.`ff_id`
   join `test_product_features` pf on pf.`fv_id`=fv.`fv_id`
   where (ff.`ff_name`,fv.`fv_value`) in (('Тип','Знач1'),('Цвет','Знач3'))
   )


Нет. При выборе пары(ff_id-fv_id) 1-2, 2-3 выводит два товара, хотя должен вернуть NULL

Я бы продолжил разработку этого варианта. Он не совсем верный, но "движется в правильном направлении". В смысле, НЕ требует 100-500 джойнов. Не вижу проблем его переработать. Он просто отдаст любые найденные пары (IN == или), а вам надо чтобы были все ( == и). Внутренний подзапрос неплохо сгруппировать и подсчитать количество совпадений для каждого продукта.

Ну и ещё, у себя, такое чудо перерабатывал в джойны вместо подзапроса в качестве условия. Вроде пошустрее, но сильно -не тестил.
...
Рейтинг: 0 / 0
Выборка продуктов по свойствам
    #38351001
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow,

причём тут "фасетный поиск", развенёте свою мысль или оставите "как есть"? :)
...
Рейтинг: 0 / 0
Выборка продуктов по свойствам
    #38351017
=)8)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109Автору:

ExOLiNeпропущено...

Нет. При выборе пары(ff_id-fv_id) 1-2, 2-3 выводит два товара, хотя должен вернуть NULL

Я бы продолжил разработку этого варианта. Он не совсем верный, но "движется в правильном направлении". В смысле, НЕ требует 100-500 джойнов. Не вижу проблем его переработать. Он просто отдаст любые найденные пары (IN == или), а вам надо чтобы были все ( == и). Внутренний подзапрос неплохо сгруппировать и подсчитать количество совпадений для каждого продукта.

Ну и ещё, у себя, такое чудо перерабатывал в джойны вместо подзапроса в качестве условия. Вроде пошустрее, но сильно -не тестил.Уже было предложено ( 14642792 ), но там тоже начнутся проблемы при выборе из однотипных значений (например, белого или серого цветов)
...
Рейтинг: 0 / 0
Выборка продуктов по свойствам
    #38351130
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=)8),

ну дык. Не только же COUNT() является "критерием"... можно и поаккуратнее фильтровать.
...
Рейтинг: 0 / 0
Выборка продуктов по свойствам
    #38351228
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=)8)там тоже начнутся проблемы при выборе из однотипных значений (например, белого или серого цветов)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
drop table if exists `test_user_selected`;
CREATE TABLE `test_user_selected` (
  `us_name` varchar(255) NOT NULL,
  `us_value` varchar(255) NOT NULL
) DEFAULT CHARSET=utf8;
insert into `test_user_selected` values
  ('Тип','Знач1'),
  ('Цвет','Знач3'),
  ('Цвет','Знач4');

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
set @qty:=(select count(distinct us_name) from test_user_selected);

select *
from test_products p
where p.p_id in (
  select pf.p_id
  from(
    select pf.p_id, ff.ff_id
    from test_user_selected us
    join test_feature_fields ff on ff.ff_name=us.us_name
    join test_feature_values fv on fv.fv_value=us.us_value
    join test_product_features pf on pf.fv_id=fv.fv_id
    group by  pf.p_id, ff.ff_id
    ) pf
  group by  pf.p_id
  having count(*)=@qty
  )

sqlfiddle.com
Еще проще (не потребуются дополнительные индексы), если в таблицу пользовательского выбора записывать ID а не текст
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка продуктов по свойствам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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