Задать вопрос
Ответы пользователя по тегу MariaDB
  • Если в БД есть запись "строка" - вставить запись "строка-1", если есть "строка-1" - вставить "строка-2"?

    Fernus
    @Fernus
    Техник - Механик :)
    Я бы немного изменил структуру, добавив одно дополнительное поле и уникальный индекс на поле name...
    Короче...

    Таблица:
    CREATE TABLE `test` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      `count` int(11) NOT NULL DEFAULT 0,
      PRIMARY KEY (`id`),
      UNIQUE KEY `name` (`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


    При вставке записей использовал бы такой запрос:
    INSERT INTO `test` (`name`) VALUES ('строка') 
    ON DUPLICATE KEY 
    UPDATE `count` = `count` + 1;


    Что в итоге?

    - В итоге не будет лишних объёмов данных в БД...
    - Всего один запрос на вставку;
    - В поле count будет число - сколько раз была занесена данная строка в БД...

    UPDATE:

    Исходя из комментариев и подробностей автора дополняю ответ...

    Можно например использовать Redis (increment)...
    Где ключ будет "строка" (в данном случае kot например).
    Перед записью ныряем в Redis, подкручиваем "счётчик" и далее берем это значение и записываем в MySQL в поле slug:

    kot-ЗНАЧНИЕ_СЧЁТЧИКА

    В итоге один запрос в Redis и один INSERT в MySQL...

    Понятна мысля?)

    P.S.: Redis можно и на MySQL тож заменить...используя мой первый вариант в ответе в качестве счётчика вместо Redis'а...но тут на пару запросов больше выйдет...что и не критично в данном случае думаю...
    Ответ написан
    4 комментария