Вставить или обновить в SQLite

У меня есть простая таблица с 4 столбцами (ID (auto gen), ip, дата, посещения)

например:

1, "10.10.0.10", "2017-03-01", 1

Я ищу Вставить или Обновить в SQLite, который должен проверить столбец ip & date, и если обновление существует, +1 еще вставить новую строку.

Я могу выпустить 2 sql, но хотел сохранить его в 1 sql.

Возможно ли это в SQLite?

1 ответ

Если вы генерируете уникальный индекс для IP и даты, вы можете использовать insert or replace Заявление для достижения этого в два этапа:

  1. Попробуйте запросить текущее количество посещений по IP и дате; установите в 0, если запись не найдена.
  2. Выполнить insert or replace для IP и даты (я использую именованные параметры в этом примере; вам нужно привязать их к соответствующим значениям):

    insert or replace into Visits (id, ip, date, visits)
    values (NULL, :ip, :date, :visits + 1);
    

Вы можете добавить таблицу contstraint для создания уникального индекса, как в следующем примере, или использовать отдельный create unique index заявление:

create table Visits (..., unique (ip, date));

Приложение: есть даже возможность обновить количество посещений в одном запросе:

insert or replace into Visits (id, ip, date, visits)
    select NULL, :ip, :date, ifnull(max(visits), 0) + 1
    from Visits
    where ip = :ip and date = :date;
Другие вопросы по тегам