Архитектура проекта
Архитектура проекта
Делаю интернет магазин. Подскажите как вы храните свойства товара, нужно хранить примерно так
И как организовать поиск по этим параметрам
И как организовать поиск по этим параметрам
Re: Архитектура проекта
Может стоить отталкиваться от опыта предков? Установи opencart и посмотри, как там сделано. Разберешься за 5 минут.
Re: Архитектура проекта
Спасибо посмотрю.
Re: Архитектура проекта
Посмотрел там как раз этого и нету
- sluchainiyznak
- Сообщения: 617
- Зарегистрирован: 2013.05.19, 17:51
- Откуда: ХМАО-Югра, г. Сургут
- Контактная информация:
Re: Архитектура проекта
Да полезная статья, но не описано как создавать группы.
Например
звук(тип-стерео,сила-15дб) и т.д.
Например
звук(тип-стерео,сила-15дб) и т.д.
- sluchainiyznak
- Сообщения: 617
- Зарегистрирован: 2013.05.19, 17:51
- Откуда: ХМАО-Югра, г. Сургут
- Контактная информация:
Re: Архитектура проекта
Оно и понятно, это ведь просто пример.
Для объединения атрибутов в группы нужно "сваять" связь многие-ко-многим между таблицей атрибутов и таблицей групп
Для объединения атрибутов в группы нужно "сваять" связь многие-ко-многим между таблицей атрибутов и таблицей групп
Re: Архитектура проекта
EAV не самое лучшее решение в плане скорости ИМХО. Типичная задача: есть 10 000 теликов, нужно вывести 300 теликов посортировав их сначала по диагонали, а потом по цене, вывести нужно таблицей с полной инфой о телике, то есть все поля. Я, например, не знаю как эту проблему без вложенных запросов решить если диагональ и цена висят в EAV-таблице... Все 10 000 выгребать и с ними оперировать не вариант
UPD: сообразил, есть способ через join линковать одну и ту же таблицу под разными alias, а в where цеплять условие по какому атрибуту конкретно с этого alias выгребать... но это ж медленно до чертиков... или нет?
UPD: сообразил, есть способ через join линковать одну и ту же таблицу под разными alias, а в where цеплять условие по какому атрибуту конкретно с этого alias выгребать... но это ж медленно до чертиков... или нет?
Re: Архитектура проекта
Если нужна скорость можешь сделать примочку которая будет строить таблицу с индексами по тем полям которые нужны и на ее основе отображать витрину с сортировками.GeX писал(а):EAV не самое лучшее решение в плане скорости ИМХО. Типичная задача: есть 10 000 теликов, нужно вывести 300 теликов посортировав их сначала по диагонали, а потом по цене, вывести нужно таблицей с полной инфой о телике, то есть все поля. Я, например, не знаю как эту проблему без вложенных запросов решить если диагональ и цена висят в EAV-таблице... Все 10 000 выгребать и с ними оперировать не вариант
Что то невероятно глупое. Наваяй пример если можешь.GeX писал(а):UPD: сообразил, есть способ через join линковать одну и ту же таблицу под разными alias, а в where цеплять условие по какому атрибуту конкретно с этого alias выгребать... но это ж медленно до чертиков... или нет?
Re: Архитектура проекта
А почему сразу не работать с такой таблицей? Всё равно придётся её строить, всё равно как-то выкручиваться когда товар будет разношерстным (или делать несколько таблиц каждую под свой товар, или в одну слить все уникальные колонки. разница? зачем делать двойную работу?).Если нужна скорость можешь сделать примочку которая будет строить таблицу с индексами по тем полям которые нужны и на ее основе отображать витрину с сортировками.
Что то невероятно глупое. Наваяй пример если можешь.
Код: Выделить всё
CREATE TABLE `param` (
`id` int(11) NOT NULL DEFAULT '0',
`attr` varchar(255) NOT NULL DEFAULT '',
`val` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`,`attr`),
CONSTRAINT `param_ibfk_1` FOREIGN KEY (`id`) REFERENCES `tv` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `param` VALUES ('1', 'diag', '32');
INSERT INTO `param` VALUES ('1', 'type', 'led');
INSERT INTO `param` VALUES ('2', 'diag', '21');
INSERT INTO `param` VALUES ('2', 'type', 'crt');
INSERT INTO `param` VALUES ('3', 'diag', '42');
CREATE TABLE `tv` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `tv` VALUES ('1', 'Gnusmas');
INSERT INTO `tv` VALUES ('2', 'Shibato');
INSERT INTO `tv` VALUES ('3', 'Hrundik');
--------------------------------------------------------------------
SELECT
tv.id,
tv.`name`,
diag_table.val AS diag,
type_table.val AS type
FROM
tv
LEFT JOIN param AS diag_table ON tv.id = diag_table.id AND diag_table.attr = 'diag'
LEFT JOIN param AS type_table ON tv.id = type_table.id AND type_table.attr = 'type'
Re: Архитектура проекта
Конечно лучше делать сразу (и под группу товаров отдельную таблицу).