Добавление новых записей mysql

Статус
В этой теме нельзя размещать новые ответы.

yavasilek

Мой дом здесь!
Регистрация
5 Окт 2008
Сообщения
1.199
Реакции
454
Есть таблица
Код:
CREATE TABLE IF NOT EXISTS `car` (
  `carid` int(10) unsigned NOT NULL,
  `brand` varchar(32) NOT NULL COMMENT 'Марка',
  `model` varchar(100) NOT NULL COMMENT 'Модель',
  `year` varchar(4) NOT NULL COMMENT 'Год',
  `carbody` blob,
  `category` int(10) unsigned NOT NULL COMMENT 'Категорияя'
) ENGINE=InnoDB AUTO_INCREMENT=9417 DEFAULT CHARSET=utf8 COMMENT='Таблица';
Записи в таком виде
Код:
(1, 'Acura', 'CL', '2003', 0x4e3b, 3),
(2, 'Acura', 'CL', '2002', 0x4e3b, 3),
(3, 'Acura', 'CL', '2001', 0x4e3b, 3),
(4, 'Acura', 'CL', '1999', 0x4e3b, 3),
(5, 'Acura', 'CL', '1998', 0x4e3b, 3),
..............
(8252, 'Chery', 'IndiS', '2011', 0x4e3b, 3),
(8253, 'Chery', 'IndiS', '2012', 0x4e3b, 3),
(8254, 'Chery', 'IndiS', '2013', 0x4e3b, 3),
(8255, 'Chery', 'IndiS', '2014', 0x4e3b, 3),
(8256, 'Chery', 'Tiggo', '2013', 0x4e3b, 7),
(8257, 'Chery', 'Tiggo', '2014', 0x4e3b, 7),
..............
(9411, 'УАЗ', 'Патриот', '2015', 0x4e3b, 7),
(9412, 'УАЗ', 'Патриот', '2014', 0x4e3b, 7),
(9413, 'УАЗ', 'Патриот', '2013', 0x4e3b, 7),
(9414, 'УАЗ', 'Патриот', '2012', 0x4e3b, 7),
(9415, 'УАЗ', 'Патриот', '2011', 0x4e3b, 7),
(9416, 'BMW', 'X4', '2015', 0x613a313a7b693a303b733a343a226a656570223b7d, 7);
Необходимо сделать запрос который бы добавил для каждой модели авто (учитывая марку, т.к. могут попасться одинаковые называния моделей) 2016 год
В итоге мы должны получить следующую картину
Код:
(1, 'Acura', 'CL', '2003', 0x4e3b, 3),
(2, 'Acura', 'CL', '2002', 0x4e3b, 3),
(3, 'Acura', 'CL', '2001', 0x4e3b, 3),
(4, 'Acura', 'CL', '1999', 0x4e3b, 3),
(5, 'Acura', 'CL', '1998', 0x4e3b, 3),
..............
(8252, 'Chery', 'IndiS', '2011', 0x4e3b, 3),
(8253, 'Chery', 'IndiS', '2012', 0x4e3b, 3),
(8254, 'Chery', 'IndiS', '2013', 0x4e3b, 3),
(8255, 'Chery', 'IndiS', '2014', 0x4e3b, 3),
(8256, 'Chery', 'Tiggo', '2013', 0x4e3b, 7),
(8257, 'Chery', 'Tiggo', '2014', 0x4e3b, 7),
..............
(9411, 'УАЗ', 'Патриот', '2015', 0x4e3b, 7),
(9412, 'УАЗ', 'Патриот', '2014', 0x4e3b, 7),
(9413, 'УАЗ', 'Патриот', '2013', 0x4e3b, 7),
(9414, 'УАЗ', 'Патриот', '2012', 0x4e3b, 7),
(9415, 'УАЗ', 'Патриот', '2011', 0x4e3b, 7),
(9416, 'BMW', 'X4', '2015', 0x613a313a7b693a303b733a343a226a656570223b7d, 7),
(9417, 'Acura', 'CL', '2016', 0x4e3b, 3),
(9418, 'Chery', 'IndiS', '2016', 0x4e3b, 3),
(9419, 'Chery', 'Tiggo', '2016', 0x4e3b, 7),
(9420, 'УАЗ', 'Патриот', '2016', 0x4e3b, 7),
(9421, 'BMW', 'X4', '2016', 0x613a313a7b693a303b733a343a226a656570223b7d, 7);
 
1. Проверяем все ли верно, что хотим получить
Код:
SELECT `brand`, `model`, `carbody`, `category` 
FROM `car` GROUP BY `brand`, `model`, `carbody`, `category`;
2. Нет первичного ключа, добавляем (по вкусу)
Код:
ALTER TABLE `car` MODIFY `carid` int(10) unsigned NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY(`carid`);
3. Вставляем
Код:
INSERT INTO `car` (`brand`, `model`, `year`, `carbody`, `category`) 
SELECT `brand`, `model`, '2016', `carbody`, `category`
FROM `car` GROUP BY `brand`, `model`, `carbody`, `category`;
 
1. Проверяем все ли верно, что хотим получить
Код:
SELECT `brand`, `model`, `carbody`, `category`
FROM `car` GROUP BY `brand`, `model`, `carbody`, `category`;
2. Нет первичного ключа, добавляем (по вкусу)
Код:
ALTER TABLE `car` MODIFY `carid` int(10) unsigned NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY(`carid`);
3. Вставляем
Код:
INSERT INTO `car` (`brand`, `model`, `year`, `carbody`, `category`)
SELECT `brand`, `model`, '2016', `carbody`, `category`
FROM `car` GROUP BY `brand`, `model`, `carbody`, `category`;
Второй запрос выдает
#1068 - Multiple primary key defined
Третий запрос выдает
#1062 - Duplicate entry 'Acura-CL-2016' for key 'car'
 
Понимаете что это значит?
SHOW CREATE TABLE car в студию, а не тот обрубок, что в первом сообщении
 
В приложенном файле - дамп средствами phpMyAdmin. Таблица объявляется не полностью, и первичные ключи добавляются уже после вставки. Реально она такая:
Код:
CREATE TABLE `ightmx_wcs_car` (
  `carid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `brand` varchar(32) NOT NULL COMMENT 'Марка автомобиля',
  `model` varchar(100) NOT NULL COMMENT 'Модель автомобиля',
  `year` varchar(4) NOT NULL COMMENT 'Год выпуска автомобиля',
  `carbody` blob,
  `category` int(10) unsigned NOT NULL COMMENT 'Категория сложности автомобиля',
  PRIMARY KEY (`carid`),
  UNIQUE KEY `car` (`brand`,`model`,`year`),
  KEY `car_brand` (`brand`),
  KEY `car_model` (`model`),
  KEY `car_year` (`year`)
) ENGINE=InnoDB

Ошибка Duplicate entry 'Acura-CL-2016' for key 'car' получается потому что:
Код:
UNIQUE KEY `car` (`brand`,`model`,`year`)

Код:
SET sql_mode = '';
INSERT IGNORE INTO `ightmx_wcs_car` (`brand`, `model`, `year`, `carbody`, `category`) 
SELECT `brand`, `model`, '2016', `carbody`, `category`
FROM `ightmx_wcs_car` GROUP BY `brand`, `model`;
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху