Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / EAV, фасетный поиск / 3 сообщений из 3, страница 1 из 1
30.07.2015, 09:38:03
    #39019256
SkyT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EAV, фасетный поиск
Есть таблицы EAV. Делаю фасетный поиск, К примеру, я задаю фильтр "ширина" и значение для него "300" (property_value_id =41).
Хочу получить все свойства товаров, которые есть у товаров, имеющих данное свойство и значение. Есть запрос, который возвращает значения для одного фильтра, но если фильтров несколько, например добавить запрос "длина" и значение "500" (property_value_id =200) то мне непонятно как написать. По идее я могу несколько раз выполнить этот запрос с разными фильтрами поиска и потом пересечь результаты, но хочется получить все сразу на sql.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
SELECT pr.name,
       pr.id AS property_id,
       pv.value,
       pv.id AS property_value_id,
       pv.description AS description
FROM products AS p
INNER JOIN product_properties AS pp ON p.id = pp.product_id
INNER JOIN properties AS pr ON pp.property_id = pr.id
INNER JOIN property_values AS pv ON pp.property_value_id = pv.id
WHERE p.id IN
    (SELECT p.id
     FROM products p
     INNER JOIN product_properties AS pp2 ON p.id = pp2.product_id
     INNER JOIN properties AS pr2 ON pp2.property_id = pr2.id
     INNER JOIN property_values AS pv2 ON pp2.property_value_id = pv2.id
     WHERE p.product_type_id IN (28)
       AND pp2.property_value_id =41
     GROUP BY p.id)
  AND pr.property_type = 'list'
GROUP BY pp.property_value_id
ORDER BY pp.property_id,
         pv.value




CREATE TABLE `products` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `full_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
 `article` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
 `description` text COLLATE utf8_unicode_ci,
 `product_type_id` int(11) DEFAULT NULL,
 `is_visible` int(11) DEFAULT NULL,
 `deleted` tinyint(4) DEFAULT '0',
 PRIMARY KEY (`id`),
 KEY `NewIndex4` (`article`) USING BTREE,
 KEY `NewIndex3` (`product_type_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=10090 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

CREATE TABLE `properties` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `property_type` varchar(7) COLLATE utf8_unicode_ci DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `NewIndex5` (`property_type`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

CREATE TABLE `property_values` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `value` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `property_id` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `NewIndex1` (`property_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=508 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

CREATE TABLE `product_types` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (`id`),
 KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

CREATE TABLE `property_values` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `value` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `property_id` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `NewIndex1` (`property_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=508 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
...
Рейтинг: 0 / 0
30.07.2015, 11:31:23
    #39019385
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EAV, фасетный поиск
бери сфинкс. на нём фасеты делать одно удовольствие
...
Рейтинг: 0 / 0
30.07.2015, 13:21:45
    #39019580
SkyT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EAV, фасетный поиск
ScareCrow,

да я думал про него. но будет использоваться node.js и куче клиентов ставить его (сфинкс) не хочется.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / EAV, фасетный поиск / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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