Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Recommended Posts

Доброго времени, Уважаемые!

Задача:

необходимо сделать счетчик, который будет каждый день к исходному значению, добавлять значение.

Пример: исходное = 100, каждый день к этому значению, должно прибавляться +3, т.е. в понедельник = 100, вторник = 103, среда = 106 и так далее.

Что рассматривал:

Данная задача, однозначно должна решаться через серверную обработку, первое и (думается) правильное - триггеры.

НО! триггер в MySQL, срабатывают по событию (добавление,удаление, изменение) записей в таблицы. Время срабатывания - не основной фактор, как я понял.

Внимание, вопрос )))

 

Правильно ли я все понял, сталкивался ли кто-нибудь с такой задачей и если можно, поделитесь опытом - примером...
Заранее благодарен ))

 

Надіслати
Поділитися на інших сайтах

Грубо говоря - пишете скрипт, который получает текущее значение, прибавляет к нему 3 и записывает обратно в БД. Ставите выполнение по cron раз в сутки и все) 

  • +1 1
Надіслати
Поділитися на інших сайтах

мне нужно выполнять действие, на стороне сервера.мне не нужен сервис дополнительный.

это все надстройки, которые не нужны!!!

 

Надіслати
Поділитися на інших сайтах

16 минут назад, anboza сказал:

мне нужно выполнять действие, на стороне сервера.мне не нужен сервис дополнительный.

это все надстройки, которые не нужны!!!

 

все вам правильно написали, пишите скрипт который берет данные из бд и возвращаюет туда же, и срабатывает по крону каждый день в нужное время

Надіслати
Поділитися на інших сайтах

29 минут назад, flai0616 сказал:

Грубо говоря - пишете скрипт, который получает текущее значение, прибавляет к нему 3 и записывает обратно в БД. Ставите выполнение по cron раз в сутки и все) 

UPDATE table SET table.field = table.field + 3 

не годится?

 

Ну и если правильно погуглить то видим по заросу cron mysql query

Первая же ссылка на стаковерфлоу и очень простое решение задачи

 

 personally find it easier use MySQL event scheduler than cron.

Enable it with

SET GLOBAL event_scheduler = ON;

and create an event like this:

CREATE EVENT name_of_event
ON SCHEDULE EVERY 1 DAY
STARTS '2014-01-18 00:00:00'
DO
DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) ,  timestamp ) >=7;

and that's it.

 

Надіслати
Поділитися на інших сайтах


1 минуту назад, nikifalex сказал:

а если сервер случайно выключили во время когда должно сработать событие?

ну так в том и соль, что триггер должен сработать не просто "в момент", а по состоянию на момент...и так он и работает в "нормальных" СУБД

 

Надіслати
Поділитися на інших сайтах

10 часов назад, anboza сказал:

ну так в том и соль, что триггер должен сработать не просто "в момент", а по состоянию на момент

Ну можно придумать такой алгоритм. Создать триггер на select из этой таблицы. Делаем хранилище для метки, которая помогает определять добавлять +3 или нет, например еще таблицу. В триггере такой примерно алгоритм - смотреть текущее время и сравниваем ее с меткой, в метке может быть текущее время с прошлого добавления +3, делаем вывод надо ли добавлять +3 или нет, если надо, то добавляем и обновляем метку, если нет, то ничего не делаем. Но я бы так не делал. Лучше в коде php обложить select-ы из той таблицы проверкой по аналогичному алгоритму, это будет легче поддерживать. 

Надіслати
Поділитися на інших сайтах


3 часа назад, nikifalex сказал:

пока нет понимания, для чего это надо вопрошающему, все потуги как то решить проблему, тщетны.

 

я в первом посте описал задачу. она именно так и выглядит. результат этого состояния счетчика, просто  будет выводиться на фронте, в блоке типа "наш сервис посетило" столько-то людей. 

Надіслати
Поділитися на інших сайтах

4 часа назад, i3bepb сказал:

Создать триггер на select из этой таблицы.

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

 

Я же ищу вариант решения, чтобы задача выполнялась просто на сервере. Каждый день, вне зависимости от селектов и апдейтов каких-либо данных...

Но сдается мне, что это не про mysql, судя по обсуждению...

Надіслати
Поділитися на інших сайтах

26 минут назад, anboza сказал:

Я же ищу вариант решения, чтобы задача выполнялась просто на сервере. Каждый день, вне зависимости от селектов и апдейтов каких-либо данных...

 

15 часов назад, Yoda сказал:

and create an event like this:


CREATE EVENT name_of_event
ON SCHEDULE EVERY 1 DAY
STARTS '2014-01-18 00:00:00'
DO
DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) ,  timestamp ) >=7;

and that's it.

Что здесь не так?

Надіслати
Поділитися на інших сайтах

27 минут назад, anboza сказал:

Каждый день, вне зависимости от селектов и апдейтов каких-либо данных...

Такие вариант выше же предлагали

16 часов назад, flai0616 сказал:

Грубо говоря - пишете скрипт, который получает текущее значение, прибавляет к нему 3 и записывает обратно в БД. Ставите выполнение по cron раз в сутки и все)

 

15 часов назад, Yoda сказал:

Ну и если правильно погуглить то видим по заросу cron mysql query

Первая же ссылка на стаковерфлоу и очень простое решение задачи

 

 personally find it easier use MySQL event scheduler than cron.

Enable it with


SET GLOBAL event_scheduler = ON;

and create an event like this:


CREATE EVENT name_of_event
ON SCHEDULE EVERY 1 DAY
STARTS '2014-01-18 00:00:00'
DO
DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) ,  timestamp ) >=7;

and that's it.

 

Надіслати
Поділитися на інших сайтах


1 час назад, chukcha сказал:

расскажите - как

Да Вы правы на select триггер не навешать, но если погуглить, то например предлагается вариант через хранимые процедуры, т.е. вместо select-а на прямую делается процедура, которая будет оберткой и уже в ней алгоритм. Возможно еще какие-то решения найдутся как это сделать.

Надіслати
Поділитися на інших сайтах


Самое простое крон
Более менее управляемо, и вычисляемо
Таски (евентсы) о них нужно знать, помнить и использовать, но это должно быть в ГДЕ- ТО  - Внимание Есть events

Надіслати
Поділитися на інших сайтах

Я с вас со всех худею дорогая редакция.
Откуда столько глупостей в голове?


1. Если падает сервер и не срабатывает sheduled task  - надо просто менять сервер.

2. Любые хранимые процедуры, триггеры и таски в базе - в конечном итоге оборачиваются некой головной болью при смене окружения, особенно если используется shared хостинг.

3. Нет принципиальной разницы это cron скрипт php, cron команда mysql или bash скрипт. Это все серверные пережитки и они все обладают одним большим недостатком - при смене окружения, паролей в базу, пользователя базы, про них можно случайно забыть.

4. Если делать совсем дубово в рамках идеи opencart - надо делать какой то шедаллер в виде событий при инициализации генераций страниц с файлом или записью базы содержащими временную метку последнго успешного события. Если вы уверены в своих силах и втом, что вы не забудете перенести кроны - крон. Если знаете как решить потенциальные проблемы с пользователем, от которого работюат триггеры и процедуры - делайте в базе. В том или ином виде задача решается однозначно и малыми костами.

 

Просто кому то удобно за 10 минут скрипт сваять, а кому то в базу пару запросов воткнуть. Единого верного решения здесь быть не может. Следуйте принципу write less do more и будет вам счастье!

Надіслати
Поділитися на інших сайтах


так и не понял, зачем писать в базу?

 

 

12 часов назад, anboza сказал:

просто  будет выводиться на фронте

 

В 24.12.2019 в 20:53, anboza сказал:

Пример: исходное = 100, каждый день к этому значению, должно прибавляться +3, т.е. в понедельник = 100, вторник = 103, среда = 106 и так далее.

echo (100+floor(($now_date - $start_date) / 86400)*3)

 

  • +1 1
Надіслати
Поділитися на інших сайтах

Только что, Otvet сказал:

так и не понял, зачем писать в базу?

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

Речь об оптимальном решении, с возможностью использовать преимущество наличия БД.

 

Только что, Yoda сказал:

Просто кому то удобно за 10 минут скрипт сваять, а кому то в базу пару запросов воткнуть. Единого верного решения здесь быть не может.

Для того и обсуждаем на форуме))

 

В любом случае, я благодарен всем участникам дискуссии, за версии, мысли и предложения )))

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.