Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Обновление списка юзеров онлайн в mysql

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Hawkmoth
Отправлено: 09 Апреля, 2015 - 15:19:24
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Янв. 2012  


Помог: 6 раз(а)




Приветствую всех!

Есть таблица `online`, в которой 3 столбца: `id`, `user` и `last_action`.
`user` - id юзера, `last_action` - время последней активности в формате DATETIME.

Обновление записей происходит при каждом обновлении страницы и раз в 5 минут по аяксу. Можно ли в один запрос проверить, есть ли уже строка с этим юзером в таблице и если нет, то добавить, а если есть, то просто обновить поле `last_act`?

Сейчас делаю в 2 этапа:
CODE (PHP):
скопировать код в буфер обмена
  1. $query=$db->query("SELECT `id` FROM `online` WHERE `user`=".$user_id." LIMIT 1");
  2. if(!$query->rowCount()){
  3.     $db->exec("INSERT INTO `online`(`user`,`last_act`) VALUES(".$user_id.",'".date('Y-m-d H:i:s')."')");
  4. }
  5. else {
  6.     $db->exec("UPDATE `online` SET `last_act`='".date('Y-m-d H:i:s')."' WHERE `user`=".$user_id." LIMIT 1");
  7. }


Коряво и громоздко. Подскажите более изящное решение.

(Отредактировано автором: 09 Апреля, 2015 - 15:30:32)

 
 Top
esterio
Отправлено: 09 Апреля, 2015 - 15:40:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




 
 Top
Hawkmoth
Отправлено: 09 Апреля, 2015 - 15:50:41
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Янв. 2012  


Помог: 6 раз(а)




Сделал так:
CODE (SQL):
скопировать код в буфер обмена
  1. ALTER TABLE `online` ADD UNIQUE INDEX (`user`)
  2. INSERT INTO `online` SET `user`=123, `last_act`='2014-05-05 03:03:03' ON DUPLICATE KEY UPDATE `last_act`='2014-05-05 03:03:03'


esterio, спасибо, по ссылкам не ходил, т.к. активно гуглил и нашел самостоятельно, но вижу, что это оно и есть.

(Отредактировано автором: 09 Апреля, 2015 - 15:52:11)

 
 Top
DeepVarvar Супермодератор
Отправлено: 09 Апреля, 2015 - 16:57:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Открой для себя REPLACE INTO
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB