DELETE
FROM `onlines`
WHERE `vizit` < SUBTIME(NOW(), '0:05:0')
удалить из таблицы onlines где vizit меньше... хз=Ъ что дальше?не пойму..а хотелось бы понять:)Что за функция SUBTIME что за NOW() и что это обозначает пять минут: 0:05:0?
Спустя 4 минуты, 24 секунды (24.01.2012 - 22:13) inpost написал(а):
А что гугл выдал на запрос:
"MySQL NOW" - ссылку на мануал, где пишется название функции. Прочитай, что-то неясно?
"MySQL NOW" - ссылку на мануал, где пишется название функции. Прочитай, что-то неясно?
Спустя 1 минута, 27 секунд (24.01.2012 - 22:15) kent666 написал(а):
5 минут назад!
Спустя 4 минуты, 2 секунды (24.01.2012 - 22:19) Winston написал(а):
mid
Мой запрос выдрал?
Этот запрос означает, удалить всех пользователей которые посещали страницу > 5 мин. назад.
NOW() - возвращает текущую дату и время
SUBTIME() - вычитает из даты и времени переданном в первом аргументе, количество сек/мин/час и т.д.
Понятно?
Мой запрос выдрал?
Этот запрос означает, удалить всех пользователей которые посещали страницу > 5 мин. назад.
NOW() - возвращает текущую дату и время
SUBTIME() - вычитает из даты и времени переданном в первом аргументе, количество сек/мин/час и т.д.
Понятно?
Спустя 10 минут, 16 секунд (24.01.2012 - 22:29) mid написал(а):
а в поле vizit только время должно быть?и тоже через `:`?
Спустя 3 минуты, 27 секунд (24.01.2012 - 22:32) Winston написал(а):
Цитата (mid @ 24.01.2012 - 21:29) |
а в поле vizit только время должно быть?и тоже через `:`? |
Можно только время, а можно и так 'ГГГГ-ММ-ЧЧ ЧЧ:ММ:СС' - такую запись возвращает ф-я NOW()
Спустя 8 минут, 41 секунда (24.01.2012 - 22:41) mid написал(а):
смотри.вот так будет правильно:
function user(){
if($_SESSION['id'] != '') /// Если сессия с ID пользователя есть то
{
$id = $_SESSION['id']; /// занесем сессию в переменную ID
$date = date("H:i:s"); /// Настоящие время
$mid = mysql_fetch_array(sql("SELECT `vizit` FROM `online` WHERE `id_user`='$id'")); /// сделаем запрос,в таблице онлайн есть мы или нас там нет
if($mid['vizit'] != '')
{
sql("UPDATE `online` SET `vizit`='$date' WHERE `id_user`='$id'"); /// если есть,заменим старое время на настоящие
}
else
{
sql("INSERT INTO `online` (`vizit`, `id_user`) VALUES ('$date', '$id')"); /// если нас нет,создадим
}
sql("DELETE FROM `online` WHERE `vizit` < SUBTIME(NOW(), '0:05:0')"); /// удалим тех кто 5минут не активничает
}
else
{
sql("DELETE FROM `online` WHERE `vizit` < SUBTIME(NOW(), '0:05:0')") /// и если сессии нет,все равно удалим тех кто пять минут не активничает!
Спустя 5 минут, 59 секунд (24.01.2012 - 22:47) Winston написал(а):
Какой формат поля?
Цитата (mid @ 24.01.2012 - 21:41) |
vizit |
Если datetime
То достаточно так написать
sql("INSERT INTO `online` (`vizit`, `id_user`) VALUES (NOW(), '" . (int)$id ."')"); /// если нас нет,создадим
Спустя 56 секунд (24.01.2012 - 22:48) Winston написал(а):
И запрос
Цитата (mid @ 24.01.2012 - 21:41) |
sql("DELETE FROM `online` WHERE `vizit` < SUBTIME(NOW(), '0:05:0')"); /// удалим тех кто 5минут не активничает |
Нужно самым первым писать.
Спустя 2 минуты, 51 секунда (24.01.2012 - 22:51) mid написал(а):
Winston
А мой запрос не сработал бы?
А почему первым на удаление?
А мой запрос не сработал бы?
А почему первым на удаление?
Спустя 12 минут, 5 секунд (24.01.2012 - 23:03) Winston написал(а):
Цитата (mid @ 24.01.2012 - 21:51) |
А мой запрос не сработал бы? |
Сработал бы.
Цитата (mid @ 24.01.2012 - 21:51) |
А почему первым на удаление? |
Упс.. Да здесь можно и не ставить первым
Но если например ты будешь выводить список пользователей онлайн или их количество и первым у тебя будет запрос на выборку всех юзеров, то у тебя также выберутся те пользователи которые активничали > 5мин. назад., только потом произойдет удаление и собственно правильное количество онлайн пользователей отобразится только после следующей перезагрузки страницы. Потому в таком случае запрос на удаление должен быть первым.
Кстати первый запрос лучше заменить на такой
$mid = mysql_fetch_assoc(sql("SELECT `vizit` FROM `online` WHERE `id_user`='" . (int)$id . "' LIMIT 1")); /// сделаем запрос,в таблице онлайн есть мы или нас там нет
Добавить лими, т.к. ты же одного юзера вибираешь.
Спустя 1 час, 46 минут, 56 секунд (25.01.2012 - 00:50) program90 написал(а):
Это значит, что нужно удалить все посещения за все время до 5 минут назад (не включая)
(p.s. поставьте, пожалуйста, плюсик)
(p.s. поставьте, пожалуйста, плюсик)
Спустя 9 часов, 56 минут, 29 секунд (25.01.2012 - 10:46) mid написал(а):
Я так года два здесь посижу и все знать буду
_____________
По любому вопросу : programmer-php@mail.ru