Как выполнять POST-запрос с периодичностью раз в сутки? (Часть 2)

V
На сайте с 04.06.2014
Offline
54
780

На сайте пользователь оставляет свой номер телефона. В базу пишется номер телефона и время отправки в формате timestamp.

Нужно каждому пользователю на протяжении 4-х дней раз в сутки (в то же время, в которое был оставлен номер телефона) отправлять SMS-сообщение. Количество новых регистраций в день от 500 и более.

Правильно ли будет сделать отправку следующим образом?

Раз в 10 минут запускаем скрипт через cron. Сам скрипт выполняет следующее:

  • Из базы вытаскивает все записи.
  • В цикле проверяет время всех записей.
  • Если время сейчас больше времени записи + 86400*4 (количество секунд в 4-х днях), то отправляем последнее сообщение и удаляем запись.
  • Если время сейчас больше 86400*3 но меньше 86400*4, отправляем третье сообщение.
  • Если время сейчас больше 86400*2 но меньше 86400*3, отправляем второе сообщение.
  • Если время сейчас больше 86400 но меньше 86400*2, отправляем первое сообщение.

Не будет ли тупить скрипт при большом количестве записей в базе (несколько тысяч)?

Партнёрка №1 в essay-нише (https://goo.gl/YfTPtG)
C
На сайте с 13.02.2014
Offline
20
#1

А не проще сразу в базе сохранять время и просто выбирать нужные записи одним запросом? Так и на миллионах тупить не будет.

V
На сайте с 04.06.2014
Offline
54
#2
capturis:
А не проще сразу в базе сохранять время и просто выбирать нужные записи одним запросом? Так и на миллионах тупить не будет.

Время в базе итак храниться будет.

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

NetSky
На сайте с 05.04.2008
Offline
104
#3
victorpavloff:
Время в базе итак храниться будет.
Как можно нужные записи выбрать, если нужно время в базе и время в данный момент сравнивать?

Запрос с условием по полю в котором хранится время ... не ?

Адаптация верстки сайта под мобильные устройства. .Скорая помощь для ваших сайтов- Wordpress, DLE, Joomla, Drupal
C
На сайте с 13.02.2014
Offline
20
#4

А зачем его сравнивать? Формируй запрос к базе на основе текущего времени и всё.

Типа того:

select * from Dates where Date > "текущая дата минус сколько надо"
F2
На сайте с 04.09.2016
Offline
5
#5

Попробуйте, выбирает из базы от текущего времени только по часам и минутам до + 10 минут,

где table и date - таблица и столбец даты в данной таблице


SELECT * FROM table WHERE EXTRACT(HOUR_MINUTE FROM date) > EXTRACT(HOUR_MINUTE FROM NOW()) AND EXTRACT(HOUR_MINUTE FROM date) < EXTRACT(HOUR_MINUTE FROM NOW() + INTERVAL 10 MINUTE);
Терашоп (https://terashop.ru)
S
На сайте с 30.09.2016
Offline
469
#6
capturis:
select * from Dates where Date > "текущая дата минус сколько надо"

Там в базе timestamp, поэтому "больше или равно" timestamp() минус "сколько надо №1" AND "меньше" timestamp() минус "сколько надо №2". Только интервал сузить надо, не то каждому клиенту раз в 10 минут письмо приходить будет. Сделать 4 таких условия с учётом 10-минутного интервала и соединить их через OR. И наверное, не SELECT *, а SELECT `нужные записи`.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий