[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: sql запрос
mid
Расшифруйте мне,пжл,этот скл запрос:
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" - ссылку на мануал, где пишется название функции. Прочитай, что-то неясно?

Спустя 1 минута, 27 секунд (24.01.2012 - 22:15) kent666 написал(а):
5 минут назад!

Спустя 4 минуты, 2 секунды (24.01.2012 - 22:19) Winston написал(а):
mid
Мой запрос выдрал? biggrin.gif
Этот запрос означает, удалить всех пользователей которые посещали страницу > 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. поставьте, пожалуйста, плюсик)

Спустя 9 часов, 56 минут, 29 секунд (25.01.2012 - 10:46) mid написал(а):
Я так года два здесь посижу и все знать буду biggrin.gif


_____________
По любому вопросу : programmer-php@mail.ru
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.