Вставить или обновить в 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
Заявление для достижения этого в два этапа:
- Попробуйте запросить текущее количество посещений по IP и дате; установите в 0, если запись не найдена.
Выполнить
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;