scorpion-ds
Новичок
Создаю универсальный модуль для каталога, с настраиваемыми полями. поля настраиваются в целом для всего каталога и не категории/вида товара.
Использую такие таблицы:
таблица позиций, заголовок внесен в нее:
CREATE TABLE `catalogue_position` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=cp1251;
набор полей
CREATE TABLE `catalogue_fields` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`type` enum('text','textarea','chexbox','list') DEFAULT NULL,
`listName` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=cp1251;
устанавливает сортировку поле для каталога (в общем-то ее можно будет выкинуть)
CREATE TABLE `catalogue_pf` (
`fieldID` int(11) DEFAULT NULL,
`sortInd` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
здесь будут хранится сами данные
CREATE TABLE `catalogue_data` (
`infID` int(11) unsigned NOT NULL,
`fieldID` int(11) DEFAULT NULL,
`infData` text
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
Теперь мне надо получить список всех товаров, желательно в виде одной таблицы, как будто бы все хранилось не в нескольких таблицах, а в одной общей, для этого я делаю такой запрос:
SELECT p.id AS p_id, p.title AS p_title, (SELECT infData FROM catalogue_data WHERE infID = p_id AND fieldID = 1) AS field_1, (SELECT infData FROM catalogue_data WHERE infID = p_id AND fieldID = 2) AS field_2, (SELECT infData FROM catalogue_data WHERE infID = p_id AND fieldID = 4) AS pos_status FROM catalogue_position AS p
Нормально ли будет работать такой сложны запрос и не будет ли вызвать тормозов?
На этой базе я только проектирую работу, еще не продумывал индексных полей, так что сильно помидорами не закидывать.
Использую такие таблицы:
таблица позиций, заголовок внесен в нее:
CREATE TABLE `catalogue_position` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=cp1251;
набор полей
CREATE TABLE `catalogue_fields` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`type` enum('text','textarea','chexbox','list') DEFAULT NULL,
`listName` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=cp1251;
устанавливает сортировку поле для каталога (в общем-то ее можно будет выкинуть)
CREATE TABLE `catalogue_pf` (
`fieldID` int(11) DEFAULT NULL,
`sortInd` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
здесь будут хранится сами данные
CREATE TABLE `catalogue_data` (
`infID` int(11) unsigned NOT NULL,
`fieldID` int(11) DEFAULT NULL,
`infData` text
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
Теперь мне надо получить список всех товаров, желательно в виде одной таблицы, как будто бы все хранилось не в нескольких таблицах, а в одной общей, для этого я делаю такой запрос:
SELECT p.id AS p_id, p.title AS p_title, (SELECT infData FROM catalogue_data WHERE infID = p_id AND fieldID = 1) AS field_1, (SELECT infData FROM catalogue_data WHERE infID = p_id AND fieldID = 2) AS field_2, (SELECT infData FROM catalogue_data WHERE infID = p_id AND fieldID = 4) AS pos_status FROM catalogue_position AS p
Нормально ли будет работать такой сложны запрос и не будет ли вызвать тормозов?
На этой базе я только проектирую работу, еще не продумывал индексных полей, так что сильно помидорами не закидывать.