ID AUTO_INCREMENT как подружить ON DUPLICATE KEY UPDATE?

Тема в разделе "Базы данных", создана пользователем Bel.site, 23 фев 2018.

Модераторы: latteo
  1. Bel.site

    Bel.site Создатель

    Регистр.:
    23 апр 2015
    Сообщения:
    38
    Симпатии:
    4
    Добрый день друзья, помогите решить задачку.
    Имею таблицу, где
    ID AUTO_INCREMENT
    Что нужно вставить в код где id=id <- вот сюда значение
    Чтоб если только по названию искало и заменяло или добавляло в базе? Череп сейчас лопнет, не могу вкурить.
    Таблица:
    Код:
    CREATE TABLE `s_products` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `url` varchar(255) NOT NULL DEFAULT '',
    `brand_id` int(11) DEFAULT NULL,
    `name` varchar(500) NOT NULL,
    `annotation` text NOT NULL,
    `body` longtext NOT NULL,
    `visible` tinyint(1) NOT NULL DEFAULT '1',
    `position` int(11) NOT NULL DEFAULT '0',
    `meta_title` varchar(500) NOT NULL,
    `meta_keywords` varchar(500) NOT NULL,
    `meta_description` varchar(500) NOT NULL,
    `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
    `featured` tinyint(1) DEFAULT NULL,
    `external_id` varchar(36) NOT NULL,
    `rating` float(3,1) DEFAULT '0.0',
    `votes` int(11) DEFAULT '0',
    `special` varchar(255) DEFAULT NULL,
    `last_modify` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
    PRIMARY KEY (`id`),
    KEY `url` (`url`),
    KEY `brand_id` (`brand_id`),
    KEY `visible` (`visible`),
    KEY `position` (`position`),
    KEY `external_id` (`external_id`),
    KEY `hit` (`featured`),
    KEY `name` (`name`(333)),
    KEY `name_2` (`name`(333))
    ) ENGINE=MyISAM AUTO_INCREMENT=370 DEFAULT CHARSET=utf8
    [​IMG]

    Сам запрос
    Код:
    INSERT INTO s_products SET id=id, name="%Название%" ON DUPLICATE KEY UPDATE name=VALUES(`name`);


    не силён в mysql, но какие поля не сравнивал, если данные одинаковые и нету ID, то всегда новое. А если принудительно сделать id определённой цифрой, то тогда заменяет информацию товара этого, либо ничего не делает если одинакого.
    Вот такое кидал, нету id, всегда новое, как id принудительно сделаю цифрой то работает всё.
    Код:
    INSERT INTO s_products (url,name,brand_id,meta_title,meta_keywords,meta_description) VALUES
    ((SELECT MAX(product_id) FROM s_lang_products),'%Название%','0','%Название%','%Название%','%Название%')
    ON DUPLICATE KEY UPDATE name=VALUES(`name`);
    
     
  2. pautina

    pautina Постоялец

    Регистр.:
    15 фев 2010
    Сообщения:
    59
    Симпатии:
    16
    Ничего вставлять не нужно. При выполнении запроса, id будет автоматические сгенерирован и вставлен, потому-что AUTO_INCREMENT.
    А для того, чтобы узнать последний вставленный id - нужно после запроса INSERT - выполнить запрос - так получите последний автоматически вставленный id