Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2017, 15:50   #1
tonchikp
Пользователь
 
Аватар для tonchikp
 
Регистрация: 16.07.2016
Сообщений: 15
Вопрос SQL Update or Insert

Уважаемые форумчане! Требуется ваша помощь!

Подскажите, как правильно? Задача простая, нужно записать визит пользователя в базу данных.
  1. Подключаемся к базе данных.
  2. Обновляем запись о посетителе в таблице.
  3. А вдруг посетитель впервые и его записи нет, значит вставляем запись.
  4. Для развёртывания (для первого запуска): А вдруг таблицы нет, значит создаём таблицу.

Вопрос 1: Беспокоит то, что каждый раз при обновлении (update) куча холостых операций (create, insert), может это как то иначе решается, подскажите.
Вопрос 2: А как вы решаете задачи которые требуются однократно при первом запуске?
Вопрос 3: Подключение к базе данных. Может в другой файл переместить? Но тогда при перемещении файла будут проблемы, а если оставить - то постоянно открывается и закрывается подключение к базе данных в разных файлах.

Код:
$db = new PDO('sqlite:file.sqlite');

$db -> exec("CREATE TABLE IF NOT EXISTS 'tableName' (

id PRIMARY KEY AUTOINCREMENT,
user TEXT UNIQUE NOT NULL,
visitCounter INTEGER DEFAULT '0'

)");

$db -> exec("INSERT OR IGNORE INTO 'tableName' (user) VALUES ('user1')");

$db -> exec("UPDATE 'tableName' SET visitCounter = visitCounter + 1 WHERE user = 'user1'");

unset($db);
Изучаю Python3. Добавляйтесь в друзья: tonchikp@jabberon.net
tonchikp вне форума Ответить с цитированием
Старый 15.07.2017, 16:38   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Беспокоит то, что каждый раз при обновлении (update) куча холостых операций (create, insert), может это как то иначе решается, подскажите.
Код:
INSERT INTO ... ON DUPLICATE KEY UPDATE
Цитата:
А вдруг таблицы нет, значит создаём таблицу
А вдруг базы нет ))Таблицы должны быть созданы заранее
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.07.2017, 22:07   #3
tonchikp
Пользователь
 
Аватар для tonchikp
 
Регистрация: 16.07.2016
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
INSERT INTO ... ON DUPLICATE KEY UPDATE
А можно поподробнее? Не нашёл в поиске и документации SQLite3 про этот способ
Возможно Вы имели ввиду MySQL
Изучаю Python3. Добавляйтесь в друзья: tonchikp@jabberon.net
tonchikp вне форума Ответить с цитированием
Старый 15.07.2017, 22:23   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Как же вы доки смотрели, если пропустили insert or replace
p51x на форуме Ответить с цитированием
Старый 15.07.2017, 22:41   #5
tonchikp
Пользователь
 
Аватар для tonchikp
 
Регистрация: 16.07.2016
Сообщений: 15
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Как же вы доки смотрели, если пропустили insert or replace
INSERT OR REPLACE это другое, я пробовал это, не устроило то что меняется AUTOINCREMENT, образуются пустоты
Изучаю Python3. Добавляйтесь в друзья: tonchikp@jabberon.net
tonchikp вне форума Ответить с цитированием
Старый 15.07.2017, 23:11   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Прямого upsert'а в sqlite нет. У вас есть два выхода:
1. Написать правильно insert or replace с апдейтом всех полей
2. Использовать два запроса insert or ignore, а после update
p51x на форуме Ответить с цитированием
Старый 15.07.2017, 23:29   #7
tonchikp
Пользователь
 
Аватар для tonchikp
 
Регистрация: 16.07.2016
Сообщений: 15
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Написать правильно insert or replace с апдейтом всех полей
Можно поподробнее?
Изучаю Python3. Добавляйтесь в друзья: tonchikp@jabberon.net
tonchikp вне форума Ответить с цитированием
Старый 16.07.2017, 00:08   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
А можно поподробнее
Нет, не доглядел что sqlite ((
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
If not exists insert into else update Ernest027 БД в Delphi 2 23.01.2017 20:33
Запрос с Insert и Update gigar SQL, базы данных 2 18.02.2016 12:37
Update or Insert и FireBird 2.5.2 Pashka_cool БД в Delphi 21 23.08.2013 23:55
Работа с SQL запросами INSERT, UPDATE, DELETE в DataGridView SERG1990 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 15.12.2012 13:46
insert и update Tanusha SQL, базы данных 4 13.03.2009 14:47