На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > SQL Update or Insert
      Уважаемые форумчане! Требуется ваша помощь!

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

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

      ExpandedWrap disabled
        $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);
        Таблицу надо создавать при установке или апгрейте сайта.
        Update/insert проблема может быть решена по крайней мере двумя способами:
        1. Проверяй пользователя при создании сессии. Храни результат в переменной сесии, кукисах .
        2. Некоторые движки баз данных позволяют делать insert/update одной орерацией. Какую БД ты используешь ?
          Цитата MIF @
          Таблицу надо создавать при установке или апгрейте сайта.

          Да, тоже не понятно зачем каждый раз дергать БД?

          Второе -- если пользователь существует, зачем дергать БД каждый раз? Можно использовать https://ru.wikipedia.org/wiki/Memcached и делать инсерт только если юзера не существует.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0236 ]   [ 15 queries used ]   [ Generated: 28.03.24, 10:05 GMT ]