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
Форумы портала PHP.SU :: Версия для печати :: Обновление списка юзеров онлайн в mysql
Форумы портала PHP.SU » » Работа с СУБД » Обновление списка юзеров онлайн в mysql

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

1. Hawkmoth - 09 Апреля, 2015 - 15:19:24 - перейти к сообщению
Приветствую всех!

Есть таблица `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. }


Коряво и громоздко. Подскажите более изящное решение.
2. esterio - 09 Апреля, 2015 - 15:40:39 - перейти к сообщению
3. Hawkmoth - 09 Апреля, 2015 - 15:50:41 - перейти к сообщению
Сделал так:
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, спасибо, по ссылкам не ходил, т.к. активно гуглил и нашел самостоятельно, но вижу, что это оно и есть.
4. DeepVarvar - 09 Апреля, 2015 - 16:57:21 - перейти к сообщению
Открой для себя REPLACE INTO

 

Powered by ExBB FM 1.0 RC1