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

Тема в разделе "Базы данных", создана пользователем yavasilek, 28 ноя 2016.

Метки:
Статус темы:
Закрыта.
Модераторы: latteo
  1. yavasilek

    yavasilek vasilek_gorbunok

    Регистр.:
    5 окт 2008
    Сообщения:
    1.176
    Симпатии:
    428
    Есть таблица
    Код:
    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);
     
  2. Black Hat

    Black Hat

    Регистр.:
    15 май 2015
    Сообщения:
    155
    Симпатии:
    101
    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`;
    
     
    yavasilek и latteo нравится это.
  3. yavasilek

    yavasilek vasilek_gorbunok

    Регистр.:
    5 окт 2008
    Сообщения:
    1.176
    Симпатии:
    428
    Второй запрос выдает
    #1068 - Multiple primary key defined
    Третий запрос выдает
    #1062 - Duplicate entry 'Acura-CL-2016' for key 'car'
     
  4. Black Hat

    Black Hat

    Регистр.:
    15 май 2015
    Сообщения:
    155
    Симпатии:
    101
    Понимаете что это значит?
    SHOW CREATE TABLE car в студию, а не тот обрубок, что в первом сообщении
     
  5. yavasilek

    yavasilek vasilek_gorbunok

    Регистр.:
    5 окт 2008
    Сообщения:
    1.176
    Симпатии:
    428
     
  6. Black Hat

    Black Hat

    Регистр.:
    15 май 2015
    Сообщения:
    155
    Симпатии:
    101
    В приложенном файле - дамп средствами 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`;
    
     
    yavasilek нравится это.
Статус темы:
Закрыта.