X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Время и пхп код
Karamba_hb
Karamba_hb
Topic Starter сообщение 7.4.2012, 16:17; Ответить: Karamba_hb
Сообщение #1


Подскажите плиз как сделать такую вещь.

тоесть я нажал кнопку и пользователю в поле бд записалась информация вместо "0" записалось "2"
И надо сделать такое, чтобы через 24 часа эта двойка изменилась обратно на 0
Либо же второй вариат когда пользователь заходит на страницу, то идёт проверка на время, по всем строкамм у пользователя там где в поле стоит значение 2. Далее идёт проверка на время, если прошло больше 24 часов с момента изменения 0 до 2, то изменить 2 на 0, иначе ничего не делать.

Я неимею понятия как это всё работает, поскольку с временем в языках програмирования неочень то и дружу, скока я не пытался((
Подскажите как оно реализовываеться и как такое сделать???
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Azazaza_hb
Azazaza_hb
сообщение 7.4.2012, 17:30; Ответить: Azazaza_hb
Сообщение #2


вот тут почитайте(хотя я мог неправильно понять задачу) http://php.su/phphttp/?cookies
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Karamba_hb
Karamba_hb
Topic Starter сообщение 7.4.2012, 17:44; Ответить: Karamba_hb
Сообщение #3


Azazaza,не не то, кукисы тут ни при чём)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 7.4.2012, 20:45; Ответить: Arks
Сообщение #4


дополнительным запросом кроме вставки записи с данными делаете CREATE EVENT который через какое-то время что-то сделает с этой записью.
что-то типа
CREATE EVENT myevent_<ID_записи> ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY DO UPDATE myschema.mytable SET mycol = 0 WHERE id=<ID_записи>;
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Karamba_hb
Karamba_hb
Topic Starter сообщение 7.4.2012, 22:02; Ответить: Karamba_hb
Сообщение #5


Arks,спс, но чуть чуть непонял

Вот напрмиер я нажимаю на кнопку и мне нужно в таблицу tb_all в поле flag добавить значение 2, тому пользователю, у которого user=$user (это реализовано)
и надо чтобы через 24 часа в этой же строке было вместо 2 упдатилось в 0
Я просто несовсем понял что как и где в этом коде менять
...
а и ещё, как работает этот код? каждую секунду проверяет прошло ли 24 часа или нет?
просто я про нагрузку боюсь))
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Karamba_hb
Karamba_hb
Topic Starter сообщение 7.4.2012, 23:52; Ответить: Karamba_hb
Сообщение #6


а почему нельзя так сделать???
<?
// Допустим мы уже имеем такие переменные в этой точки срабатывания скрипта:
$time = time(); // Это реальное время в секундах от начала эпохи (01.01.1970г)
$user = 'вася'; // Логин юзера



// Подключаемся к базе к примеру, но здесь это не нужно будет, если функция в скрипте будет
include'connect.php';

// Ищем всю информацию в таблице function, где поле user равна переменной $user, тоесть вася
$sql = mysql_query("SELECT * FROM `function` WHERE `user`='{$user}'");
$ROW_US = mysql_fetch_assoc($sql); // $ROW_US['...'] - это весь массив вытащенных данных из таблицы function


$time_end = $time - 24*60*60; // $time_end это реальное время от начала эпохи минус 24часа (1сутки)

// $ROW_US['time_s'] - это время эпохи, записанное ранее нажатной кнопкой в базу данных
// Если прошло 24часа, то делаем запись в базу с новым временем и меняем flag
if ($time_end >= $ROW_US['time_s'])
mysql_query("UPDATE `function` SET `time_s`='{$time}',`flag`='0' WHERE `user`='{$user}'"); // Если больше 24часов прошло, то обновляем данную таблицу у юзера

?>
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 8.4.2012, 12:54; Ответить: Arks
Сообщение #7


[PHP]
$userid = 1;
$evtname = 'evt'.$userid;
$pdo->query("
SET @@global.event_scheduler = 1;
INSERT INTO tb_all SET user_id = $userid, flag = '2';
CREATE EVENT $evtname ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 SECOND DO UPDATE tb_all SET flag = '0' WHERE user_id=$userid;
");[/PHP]
За нагрузку правильно боитесь, тут надо правильно объемы задач рассчитывать. Каждую секунду мучить сервер нет смысла(event_sheduler и так постоянно мучается встроенными интервалами когда запущен и ждет наступления событий) - поэтому создаются просто 1-разовые именованные event'ы для каждой записи. После выполнения они удаляются.
Event_sheduler это демон который согласно встроенному таймеру проверяет какие события наступили для заданных временных условий и вызывает их обработчики. Поэтому если их будет одновременно 100500 он конечно может кушать прилично памяти. Но с таким объемам вставок за 24 часа возможно никакой mysql и так не справится. Так или иначе этот подход окажется скорее всего быстрее и бережливее к ресурсам чем Ваш. Делайте как больше нравится. И еще ему не требуется время хранить, это конечно сомнительный - но тоже плюс.

Ну а главное точность - с этим можно быть уверенным что все сработает и именно тогда когда надо а не когда-то через 10 лет. Т.е. такой подход повышает достоверность состояния флага. Например Вам захочется чтобы другие модели тоже работали с этим флагом - и вот у Вас в 5 разных местах будет вызываться метод который будет делать эти Ваши проверки каждый раз начиная от лишнего запроса на одного пользователя и заканчивая полным сканом таблицы - а вот скажите, нафига это нужно каждый раз если операция одноразовая скажем для каждого выставления флага в '2'?
Так что делайте выводы о нагрузке сами.
Сразу замечу про ограничения существующих версий - технология не очень старая, поэтому обычно не стоит рассчитывать что процедуры, триггеры и подготовленные выражения позволят создавать event'ы - поэтому все ручками из php
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Karamba_hb
Karamba_hb
Topic Starter сообщение 8.4.2012, 14:21; Ответить: Karamba_hb
Сообщение #8


Arks,если нагрузка будет большая то зачем мне тогда этот код?)
я думаю мой код который написал я будет лучше?) или это не так?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 8.4.2012, 14:45; Ответить: Arks
Сообщение #9


Karamba, попробуйте оба, а потом расскажете. О разнице я написал Выше. Вам решать что больше подходит.

Разница примерно такая:
Классический подход:
1) Вы делаете какие-то действия в БД.
2) Через некоторое время вы получаете какие-то данные
3) Вы что-то меняете в БД если наступили определенные условия
Подход с использованием mysql_events
1) Вы делаете какие-то действия в БД
2) Вы твердо уверены что через какое-то время определенные условия наступят(т.е единственным условием тут является само время).
3) При совершении действия в п.1 Вы также указываете серверу какие изменения необходимо произвести(при этом Вы легко можете проверять любые другие условия) через заданное время.
Т.е. второй подход позволяет избавиться от проверки условия наступления нужного времени т.е. сервер сам все делает и БД всегда находится в актуальном состоянии. Если бы у Вас две модели обращались к флагу в разное время - каждая из них должна была бы выполнить проверку на наступление времени, 100500 моделей - 100500 проверок. При этом для каждой из них проверка была бы обязательной(т.к они ничего не знают друг о друге, знают только о БД). Mysql_events позволяет не делать подобных проверок, не гонять лишние данные между php-клиентом и mysql-сервером
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Karamba_hb
Karamba_hb
Topic Starter сообщение 8.4.2012, 16:56; Ответить: Karamba_hb
Сообщение #10


Arks,ну селектить мне базу так и так надо для моих других скриптов, поэтому я думаю лучше мой вариант сделать)

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Странный трафик на сайте длительное время
33 TABAK 8633 12.4.2024, 5:56
автор: Skyworker
Горячая тема (нет новых ответов) Вы тратите собственное время зря?
35 metvekot 2521 19.3.2024, 20:14
автор: MisterBit
Открытая тема (нет новых ответов) Почистить код на сайте
1 Timka 1104 2.1.2021, 1:13
автор: 0pium
Горячая тема (нет новых ответов) ClickTimes.ru - время зарабатывать на мобильном трафике!
67 CT-Support 9619 15.10.2020, 20:49
автор: CT-Support
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыВы мне код, я вам как - делать не надо.
0 fedornabilkin 956 18.9.2020, 18:59
автор: fedornabilkin


 



RSS Текстовая версия Сейчас: 16.4.2024, 12:22
Дизайн