Замена значения поля в БД через опр. время.

Ответить
Crank174RuS
Сообщения: 66
Зарегистрирован: 19.09.2010
Всем привет :) Опять я вас беспокою :)
Вопрос такой:
Как сделать чтобы через определенное время из таблицы test_table ставилось значение 0 в поле к примеру admin?
Вот так пойдет?:
mysql_query("UPDATE `test_table` SET `admin` = '0' WHERE `id` = '$user_id' <NOW()-INTERVAL 5 DAY");

test_table - это таблица
admin - это поле
id - это надо чтобы значение 0 ставилось не всем пользователям

Ну так пойдет?
Если есть ошибки то скажите плиз :)

-- добавлено 06 окт 2011, 20:05 --

просто когда запускается скрипт он сразу ставит значение 0, почему то интервал не срабатывается :(

Аватара пользователя
Distructor
Администратор
Сообщения: 1607
Зарегистрирован: 28.12.2009
Crank174RuS писал(а):<NOW()-INTERVAL 5 DAY
откуда ты это взял?

Crank174RuS
Сообщения: 66
Зарегистрирован: 19.09.2010
Distructor писал(а):
Crank174RuS писал(а):<NOW()-INTERVAL 5 DAY
откуда ты это взял?
На каком то форуме смотрел, просто я так понял.
Не правильно?

Аватара пользователя
AgentSIB
Сообщения: 329
Зарегистрирован: 17.05.2010
Сделай через крон либо по запросу, запоминая время последнего выполнения.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Аватара пользователя
Distructor
Администратор
Сообщения: 1607
Зарегистрирован: 28.12.2009
ты хочешь чтобы админка снималась через 5 дней после выдачи?
тогда например date_add это дата установки прав

Код: Выделить всё

UPDATE `test_table` SET `admin` = '0' WHERE date_add < NOW()-INTERVAL 5 DAY
или если дата хранится как timestamp, то

Код: Выделить всё

UPDATE `test_table` SET `admin` = '0' WHERE date_add < unix_timestamp(NOW()-INTERVAL 5 DAY)

Crank174RuS
Сообщения: 66
Зарегистрирован: 19.09.2010
Я вот попробовал ток на время.
Вставил в date_add значение 60 а вместо 5 DAY = 50 SECOND
когда запускаю скрипт он почему то скаразу адмику снимает :(

Аватара пользователя
Distructor
Администратор
Сообщения: 1607
Зарегистрирован: 28.12.2009
Crank174RuS писал(а):Вставил в date_add значение 60
в date_add должна храниться дата (например возвращаемая функцией time() ) а не какое-то левое число

Crank174RuS
Сообщения: 66
Зарегистрирован: 19.09.2010
все равно неробит
я просто не понял тебя(
я сделал чтобы в БД после запуска cron записавало дату
дату записывает в таком виде: 2011-10-07

Аватара пользователя
Distructor
Администратор
Сообщения: 1607
Зарегистрирован: 28.12.2009
структура таблицы

Код: Выделить всё

CREATE TABLE IF NOT EXISTS `test_table` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `is_admin` int(11) NOT NULL DEFAULT '0' COMMENT '0-нет админки, 1 -есть',
  `add_admin_date` int(11) NOT NULL COMMENT 'дата добавления админских прав',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
добавление пользователя с админкой

Код: Выделить всё

INSERT INTO `test_table` (`is_admin`, `add_admin_date`) VALUES ('1', UNIX_TIMESTAMP());
или добавление флага админки существующему

Код: Выделить всё

UPDATE `test_table` SET `is_admin`=1, `add_admin_date`=UNIX_TIMESTAMP() WHERE `user_id`=1;
ищем тех кому дали админку больше чем 5 дней назад и снимаем с них админку

Код: Выделить всё

UPDATE `test_table` SET `is_admin`=0 WHERE `add_admin_date` > UNIX_TIMESTAMP(NOW() - INTERVAL 5 DAY);
этот запрос можешь поставить в крон на выполнение раз в день или час или полчаса в зависимости от того насколько критично снимать админку ровно через 5 дней.

Crank174RuS
Сообщения: 66
Зарегистрирован: 19.09.2010
Distructor писал(а):структура таблицы

Код: Выделить всё

CREATE TABLE IF NOT EXISTS `test_table` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `is_admin` int(11) NOT NULL DEFAULT '0' COMMENT '0-нет админки, 1 -есть',
  `add_admin_date` int(11) NOT NULL COMMENT 'дата добавления админских прав',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
добавление пользователя с админкой

Код: Выделить всё

INSERT INTO `test_table` (`is_admin`, `add_admin_date`) VALUES ('1', UNIX_TIMESTAMP());
или добавление флага админки существующему

Код: Выделить всё

UPDATE `test_table` SET `is_admin`=1, `add_admin_date`=UNIX_TIMESTAMP() WHERE `user_id`=1;
ищем тех кому дали админку больше чем 5 дней назад и снимаем с них админку

Код: Выделить всё

UPDATE `test_table` SET `is_admin`=0 WHERE `add_admin_date` > UNIX_TIMESTAMP(NOW() - INTERVAL 5 DAY);
этот запрос можешь поставить в крон на выполнение раз в день или час или полчаса в зависимости от того насколько критично снимать админку ровно через 5 дней.
Все равно после запуска крона он сразу ставит 0(

-- добавлено 17 окт 2011, 20:02 --

Крон ставлю так:

$tests = mysql_query("UPDATE `test_table` SET `is_admin`=0 WHERE `add_admin_date` > UNIX_TIMESTAMP(NOW() - INTERVAL 5 DAY)");

Аватара пользователя
AgentSIB
Сообщения: 329
Зарегистрирован: 17.05.2010
Я вижу ты не совсем понимаешь что такое крон :)
http://ru.wikipedia.org/wiki/Cron
http://ru.wikipedia.org/wiki/NnCron
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Crank174RuS
Сообщения: 66
Зарегистрирован: 19.09.2010
AgentSIB писал(а):Я вижу ты не совсем понимаешь что такое крон :)
http://ru.wikipedia.org/wiki/Cron
http://ru.wikipedia.org/wiki/NnCron
Я знаю что это)) Я имею ввиду в файл пишу код потом ставлю на него крон и все равно не робит

Аватара пользователя
AgentSIB
Сообщения: 329
Зарегистрирован: 17.05.2010

Код: Выделить всё

$tests = mysql_query("UPDATE `test_table` SET `is_admin`=0 WHERE `add_admin_date` < (UNIX_TIMESTAMP() - 5 * 24 * 3600)");
Попробуй так.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Ответить