Добрый день!
Необходимо создать SQL запрос, которй сгенерирует виртуальную таблицу из нескольких таблиц.
Структура реальных таблиц на примере двух:
CREATE TABLE `spr_ts_voda_car_type` (
`id_car_type` int(8) NOT NULL,
`name` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='';
ALTER TABLE `spr_ts_voda_car_type`
ADD PRIMARY KEY (`id_car_type`);
ALTER TABLE `spr_ts_voda_car_type`
MODIFY `id_car_type` int(8) NOT NULL AUTO_INCREMENT;
COMMIT;
CREATE TABLE `spr_ts_auto_car_serie` (
`id_car_serie` int(11) NOT NULL COMMENT 'ID',
`id_car_model` int(8) NOT NULL,
`id_car_generation` int(8) DEFAULT NULL,
`name` varchar(255) NOT NULL,
`date_create` int(10) UNSIGNED DEFAULT NULL,
`date_update` int(10) UNSIGNED DEFAULT NULL,
`id_car_type` int(8) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Cерии';
ALTER TABLE `spr_ts_auto_car_serie`
ADD PRIMARY KEY (`id_car_serie`),
ADD KEY `name` (`name`),
ADD KEY `id_car_model` (`id_car_model`),
ADD KEY `id_car_type` (`id_car_type`),
ADD KEY `fk_car_serie_car_generation` (`id_car_generation`);
ALTER TABLE `spr_ts_auto_car_serie`
MODIFY `id_car_serie` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID';
COMMIT;
CREATE TABLE `spr_ts_voda_car_modification` (
`id_car_modification` int(11) NOT NULL COMMENT 'ID',
`id_car_serie` int(11) NOT NULL,
`id_car_model` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`id_car_type` int(8) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Модификации';
ALTER TABLE `spr_ts_voda_car_modification`
ADD PRIMARY KEY (`id_car_modification`),
ADD KEY `id_car_model` (`id_car_model`),
ADD KEY `id_car_serie` (`id_car_serie`),
ADD KEY `id_car_type` (`id_car_type`);
ALTER TABLE `spr_ts_voda_car_modification`
MODIFY `id_car_modification` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID';
COMMIT;
CREATE TABLE `spr_ts_voda_car_model` (
`id_car_model` int(11) NOT NULL COMMENT 'ID',
`id_car_mark` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`id_car_type` int(8) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Модели';
ALTER TABLE `spr_ts_voda_car_model`
ADD PRIMARY KEY (`id_car_model`),
ADD KEY `name` (`name`),
ADD KEY `id_car_mark` (`id_car_mark`),
ADD KEY `id_car_type` (`id_car_type`);
ALTER TABLE `spr_ts_voda_car_model`
MODIFY `id_car_model` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID';
COMMIT;
CREATE TABLE `spr_ts_voda_car_mark` (
`id_car_mark` int(8) NOT NULL COMMENT 'ID',
`name` varchar(255) NOT NULL,
`id_car_type` int(8) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Марки';
ALTER TABLE `spr_ts_voda_car_mark`
ADD PRIMARY KEY (`id_car_mark`),
ADD KEY `id_car_type` (`id_car_type`);
ALTER TABLE `spr_ts_voda_car_mark`
MODIFY `id_car_mark` int(8) NOT NULL AUTO_INCREMENT COMMENT 'ID';
COMMIT;
CREATE TABLE `spr_ts_voda_car_characteristic` (
`id_car_characteristic` int(8) NOT NULL COMMENT 'id',
`name` varchar(255) DEFAULT NULL,
`id_parent` int(8) DEFAULT NULL,
`id_car_type` int(8) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Характеристики';
ALTER TABLE `spr_ts_voda_car_characteristic`
ADD PRIMARY KEY (`id_car_characteristic`),
ADD KEY `name` (`name`,`id_parent`,`id_car_type`),
ADD KEY `id_car_type` (`id_car_type`);
ALTER TABLE `spr_ts_voda_car_characteristic`
MODIFY `id_car_characteristic` int(8) NOT NULL AUTO_INCREMENT COMMENT 'id';
COMMIT;
CREATE TABLE `spr_ts_voda_car_characteristic_value` (
`id_car_characteristic_value` int(8) NOT NULL,
`value` varchar(255) NOT NULL,
`unit` varchar(255) DEFAULT NULL COMMENT 'Еденица измерения',
`id_car_characteristic` int(8) NOT NULL,
`id_car_modification` int(8) NOT NULL,
`id_car_type` int(8) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Значения характеристик';
ALTER TABLE `spr_ts_voda_car_characteristic_value`
ADD PRIMARY KEY (`id_car_characteristic_value`),
ADD UNIQUE KEY `id_characteristic` (`id_car_characteristic`,`id_car_modification`),
ADD UNIQUE KEY `id_car_characteristic` (`id_car_characteristic`,`id_car_modification`,`id_car_type`),
ADD KEY `id_car_type` (`id_car_type`),
ADD KEY `id_car_type_2` (`id_car_type`);
ALTER TABLE `spr_ts_voda_car_characteristic_value`
MODIFY `id_car_characteristic_value` int(8) NOT NULL AUTO_INCREMENT;
COMMIT;
Структура целевой таблицы:
ID марки, Марка, ID модели, Модель, ID модификации, Модификация, Значение характеристики_1, Значение характеристики_2
`spr_ts_voda_car_mark`.`id_car_mark`, `spr_ts_voda_car_mark`.`name`, `spr_ts_voda_car_model`.`id_car_model`, `spr_ts_voda_car_model`.`name`, `spr_ts_voda_car_modification`.`id_car_modification` , `spr_ts_voda_car_modification`.`name`, `spr_ts_voda_car_characteristic_value`.`value` (где `id_car_characteristic` = 15), `spr_ts_voda_car_characteristic_value`.`value` (где `id_car_characteristic` = 35)
Доступ к тестовой базе смогу предоставить через phpMyAdmin
Постоплата
Опубликован 16.09.2019 в 09:17