Как реализовать лимит размещения сообщений для пользователя? - PullRequest
0 голосов
/ 22 октября 2009

Пользователь может публиковать не более 4 раз в течение дня.

Сложность в том, как начать день с базы данных? Я использую MySQL

Ответы [ 4 ]

2 голосов
/ 22 октября 2009

Было бы лучше, если бы вы хранили его TimeZone. У людей в разных частях света разное время, поэтому начало дня будет разным для каждого из них.

Вы можете получить текущую дату и текущее время. Проверьте, сколько сообщений было сделано с начала дня 00:00 в этот день. Если число равно 4, то сообщите пользователю, что он достиг максимального предела.

Используя NOW(), вы можете использовать для получения текущей даты и времени

mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2009-10-22 10:49:15 |
+---------------------+
1 row in set (0.00 sec)

Вы должны знать, в каком часовом поясе находится ваш сервер, затем укажите время UTC и добавьте / вычтите время, чтобы получить местное время пользователя.

Вы, вероятно, хотели бы взглянуть на Данные и время MySQL

  • DATE() - получить текущую дату
  • CURTIME() - Получить текущее время
  • CONVERT_TZ - преобразование из одного часового пояса в другой

Как получить начало дня в базе данных

Это не должно быть проблемой, как я уже сказал, получить текущее время из БД, скорректировать разницу во времени, чтобы сделать время UTC. затем настройте часовой пояс пользователя, чтобы сделать время в соответствии с его часовым поясом.

например. 3:30 (время сервера) - 1:00 (часовой пояс сервера) + 5:30 (часовой пояс пользователя) = 8:00 (время пользователя)

Итак, начало дня для этого пользователя - 00:00, и у него прошло 8 часов.

N.B .: Позаботьтесь о разнице во времени. например 2:30 - 3:30 = -1:00, что означает 23:00 в предыдущий день. Примите это также во внимание.

1 голос
/ 22 октября 2009

Это будет получать записи на основе сегодня:

SELECT * FROM whatever WHERE date(datefield) = CURdate();
0 голосов
/ 22 октября 2009

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

0 голосов
/ 22 октября 2009
SELECT datetime FROM posts ORDER BY date LIMIT 3,1

if now - datetime >= 86400:            // pick one
if datetime.datepartonly < today:
    allow posting
else:
    deny posting

Если вы уверены, что время вашего сервера MySQL установлено правильно:

SELECT COUNT(*) FROM posts WHERE DATE_SUB(NOW(), 1 day) <= datetime; // OR
SELECT COUNT(*) FROM posts WHERE CURRENT_DATE() <= datetime;
if count < 4:
    allow
else:
    deny
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...