Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Изменение значений бд MySQL через определенное время.
 
 автор: Lors   (09.02.2009 в 02:19)   письмо автору
 
 

Задача заключается в том что необходимо изменить данные таблицы MySQL через определенное время. То есть клиент делает запрос в 14.00 запрос MySQL( "UPDATE table SET user = '1' WHERE id = '$id'") срабатывает к примеру в 14.30. В том смысле что значение user станет равным 1 только в 14.30. Есть вариант использовать функции времени php, но в этом случаи если произойдет restart сервера то запрос так и не будет выполнен. Есть идеи? Заранее благодарю!

  Ответить  
 
 автор: Valick   (09.02.2009 в 06:39)   письмо автору
 
   для: Lors   (09.02.2009 в 02:19)
 

Как вариант, вставлять значение + временная метка в другую таблицу и уже из неё переносить в основную при достижении определённого времени.
А можно вместо UPDATE использовать всегда INSERT и всё ту же временную метку, а просроченные значения удалять... принцип работы с сессионными переменными.

Я думаю вариантов больше чем два, недостаточно информации.

  Ответить  
 
 автор: Lors   (09.02.2009 в 15:20)   письмо автору
 
   для: Valick   (09.02.2009 в 06:39)
 

Описанный вами метод, как я понимаю подразумевает значительную нагрузку на сервер?

  Ответить  
 
 автор: Valick   (09.02.2009 в 15:27)   письмо автору
 
   для: Lors   (09.02.2009 в 15:20)
 

Я же сказал, информации недостаточно... какие могут быть советы....
Вы сказали что надо сделать, но не сказали зачем...
Я лично не вижу в своих словах особой нагрузки на сервер;)

  Ответить  
 
 автор: Lors   (10.02.2009 в 10:35)   письмо автору
 
   для: Valick   (09.02.2009 в 06:39)
 

Вы имеете виду тип MySQL timestamp? Я относительно недавно в web-программирование еще не сталкивался с работой данного типа и мне не знаком механизм. Опишите пожалуйста поподробнее..

  Ответить  
 
 автор: Trianon   (09.02.2009 в 09:58)   письмо автору
 
   для: Lors   (09.02.2009 в 02:19)
 

Вам явно нужно, мягко говоря, не то, что Вы описываете.
Даже используя функции php, Вы такого поведения не добьетесь. К счастью.

  Ответить  
 
 автор: Lors   (09.02.2009 в 15:23)   письмо автору
 
   для: Trianon   (09.02.2009 в 09:58)
 

Я тоже склонен предполагать, что запрос нужно сделать сразу, а результат отображать спустя время.. ну возможно есть еще какие то пути?

  Ответить  
 
 автор: Trianon   (09.02.2009 в 15:48)   письмо автору
 
   для: Lors   (09.02.2009 в 15:23)
 

Вообще-то любой сервер стремится к тому, чтоб запросы исполнять как можно более быстро.
Может всё же не сразу надо делать запрос, а именно тогда, когда хочется увидеть нужный результат?

  Ответить  
 
 автор: Lors   (10.02.2009 в 10:23)   письмо автору
 
   для: Trianon   (09.02.2009 в 15:48)
 

Именно. Получается, что необходимо перезапустить скрипт через 30 минут, код будет выглядит примерно так:

<?php
$sql_query_pr 
"SELECT * FROM table WHERE id='$id'"
$pr mysql_query($sql_query_pr) or die(mysql_error()); 
$mas_pr mysql_fetch_array($pr);

$cur_time_s time();
$end_time_s $cur_time_s 1800;

if (
$mas_pr['end_time1'] < $cur_time_s)
{
        
$query1 "UPDATE table SET begin_time1 = '$cur_time_s' WHERE id = '$id'";
        
$query2 "UPDATE table SET end_time1 = '$end_time_s' WHERE id = '$id'";
        
mysql_query (@$query1,  $dbcnx);
        
mysql_query (@$query2,  $dbcnx);
}
?>

Насколько я понимаю это единственный возможный вариант? И даже тут надо использовать сторонние программы, например - какой нибудь планировщик задач, в который можно через скрипт php вбивать значения времени запуска php кода. Кто может посоветовать такую программу? У кого есть альтернативные идеи?

  Ответить  
 
 автор: Trianon   (10.02.2009 в 11:02)   письмо автору
 
   для: Lors   (10.02.2009 в 10:23)
 

> И даже тут надо использовать сторонние программы, например - какой нибудь планировщик задач, в который можно через скрипт php вбивать значения времени запуска php кода.

Наконец.

>Кто может посоветовать такую программу?
http://softtime.ru/forum/srch.php?id_forum=6&name=cron&srchwhere=2&id_forum=1&logic=1

Еще в MySQL 5.1 появился планировщик событий http://dev.mysql.com/doc/refman/5.1/en/events.html
Если есть доступ к созданию событий и хранимых процедур, можно использовать его.

>У кого есть альтернативные идеи?
Либо (если ни cron ни webcron ни mysql sheduler недоступны) придется запускать этот фрагмент в начале каждого значимого скрипта.

  Ответить  
 
 автор: Lors   (10.02.2009 в 17:56)   письмо автору
 
   для: Trianon   (10.02.2009 в 11:02)
 

Спасибо ;)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования