Привет. Хочу сделать очки, которые будут у пользователя и чтобы они прибавлялись по одному спустя 24 часа после регистрации. Например, пользователь зарегистрировался и у него 0 очков, но спустя 24 часа после регистрации 1 и так каждый день до бесконечности. Подскажите, пожалуйста, как можно это реализовать, скинув нужные книги или ещё что-то, не знаю.
Гуглить операции с датой временем в PHP операции с датой временем в MySQL --- Добавлено --- Всё, что тебе нужно знать это сколько дней прошло с указанной даты. Научись это вычислять, для этого надо чуть-чуть узнать про конкретный язык, на котором будешь делать.
Самая простая реализация это: 1. Написать скрипт, который будет при обращении к нему увеличивать очки всех пользователей на единицу. 2. Раз в сутки, в полночь (непременно в полночь!) запускать этот скрипт с помощью его величества Crontab: https://help.ubuntu.ru/wiki/cron всё
@Valick, ему чужие посты ЧСВ не позволяет читать. Или он уже успел отправить artoodetoo в ЧС --- Добавлено --- @Kory, тебе в первом посте написали, что нужно просто посчитать кол-во суток с момента регистрации, время которой, естественно, нужно запоминать. При отдаче страницы ты вычисляешь это кол-во, ну а на клиенте дополнительно можешь запускать счетчик на JS, если нужна интерактивность.
@Kory, тебе @artoodetoo уже подсказал правильный вариант. текущая дата (timestamp) - дата регистрации (timestamp) / (60*60*24) = количество очков (если надо можно округлить до целого) вот и вся математика
У тебя уже есть пользователи, поэтому сначала нужно всем (кто соответствует требованиям) выдать хотя бы по одному очку (если это необходимо). Код (Text): UPDATE `users` SET `points` = `points` +1 WHERE `date_reg` > ( UNIX_TIMESTAMP() - 86400 ); Либо выдать всем кол-во очков равное кол-ву суток с момента регистрации, Valick подсказал как. По хорошему, нужно записывать время, когда нужно выдавать следующий бонус (добавлять очки) конкретному пользователю. Можешь добавить поле при регистрации `last_bonus` и записывать текущее время + сутки. В итоге запрос может выглядеть так Код (Text): UPDATE `users` SET `last_bonus` = ( UNIX_TIMESTAMP() + 86400 ), `points` = `points` +1 WHERE `last_bonus` < UNIX_TIMESTAMP(); last_bonus = записываешь текущее время + 86400 (сутки) points = кол-во очков(бонусов) Все это дело можно запихнуть в крон-задачу, если погрешность выдачи бонусов в виде 1-5 минут не критична. --- Добавлено --- 50 клиентов = 50 счетчиков? "Хороший" совет. И просто посчитать время с момента регистрации не решит проблему, когда нужно каждые сутки выдавать эти бонусы.
@lastdays, ты немного отвлекаешся от тз. Речь о том как начислять по одному очку в сутки с момента регистрации. Кроме таймстампа момента регистрации для этого ничего не надо.
@lastdays, совет хороший. Какие 50 счетчиков? А вот по поводу «крон-задачи» и т.п. Валик уже высказался. ТС ничего не писал про трату бонусов и т.п. Так что пока это просто статус. --- Добавлено --- P.S. Даже если очки нужно будет тратить, можно просто завести поле «потрачено».
@miketomlin, именно об этом речь. @lastdays, про трату очков не было ни слова. И даже забегая вперёд если речь зайдёт об оптимизации, крон можно использовать для обхода всей БД типа аля кеш для каких-то специфических выборок типа рейтинга и тд. Но ни в коем случае для начисления каких-либо очков. Грубо говоря если скрипт крона запустить два и более раз подряд с учётом суточного интервала, то состояние БД ничем не должно отличаться хоть запускай до посинения. Иными словами крон должен брать информацию из БД обрабатывать и складывать обратно в БД ничего не добавляя от себя.
А если вспомнить про тестирование и воспроизводимость результатов, бекапы/ресторы, перенос данных с продакшена на локалку... Дабавление каждый день по крону внесёт только путаницу в которой фиг разберёшся. Не надо так делать. Это дорого во всех отношениях.
это самое простое решение, пусть начнет с этого, дальше будет постепенно усложнять обучение должно идти от победы к победе дай новичку победить в малом, и постепенно он победит во всем остальном это только Елисеев первым словом вместо "мама" произнес "полиморфизм" - а всем остальным приходится учиться
- Здравствуйте, мне нужно крутить шурупы, как это сделать? - Чувак, возьми отвертку, потом если надо докупишь шуруповерт Всё остальные: - Какая блин отвертка, ты дурак? Шуруп можно просто захерачить молотком! Жесть p.s. ТС хочет начислять очки раз в день. "Очки" явно подразумевают под собой отдельную сущность, а вовсе не количество дней с момента регистрации. Ещё раз - жесть. Форум окончательно превратился в какое-то говно.
@romach, только не молотком, а токарным станком. --- Добавлено --- Значит, я вас не понял --- Добавлено --- Это действительно жесть. На элементарщине такие баталии. Такое ощущение, что здесь половина диванных теоретиков. Вариант artoodetoo более чем адекватный. Да, он критичен к показаниям тек. времени. Но это вполне норм. Сейчас все так работает. Нужно следить за корректностью тек. времени.
@romach, херовастенько у тебя с аллегориями. Не надо заниматься подменой понятий, то что предложил @Roman __construct это как раз и есть забить шуруп молотком, и не абы как, а наебеняку с загибом "шоб крепше держался".
Да какая разница. @Roman __construct (ну и @lastdays) дал наиболее близкий к общему решению ответ. Потому что очки добавляемые раз в сутки, должны добавляться раз в сутки, вне зависимости от того кто какую страницу открыл и сколько дней прошло с момента регистрации. Очки могут начисляться и сниматься и по другим событиям ни как не связанными с этим. Что же мы видим? 1. Считать количество дней с момента регистрации и выдавать за очки - это костыль. Самый настоящий, потому что в таком раскладе очки вообще перестают быть собой, без комментариев. 2. Слишком много кронов и вообще непереносимо. Чо? Да просто берешь pm2, описываешь конфиг и вот у тебя уже работают кроны, очереди и прочие сервисы вокруг приложения. Правильный flow, когда таск оформлен в виде handler`а запускающегося из любого окружения (веб, cli, очереди) позволит и тестировать и поддерживать. CQRS 3. Иммутабельный крон - это конечно сила )
Я внезапно хочу предложить вашему вниманию одну из некогда любимых мной притч: То же самое и здесь Судя по вопросу человека - ему даже просто разобраться с использованием Cron - это уже будет значительный прогресс. А писать решения, которые он не сможет использовать - это только зря тратить время. Такова моя мотивация в данном конкретном случае.
Начисление очков завязаны на время. Ключевое здесь именно "очки", а вовсе не "сколько дней прошло с регистрации". Т.ч. я исхожу именно из того что написал ТС.
Это ваша трактовка. Она далеко не единственная. Например, это может быть «репа», завязанная на «возраст». О чем и писал ТС в стартовом посте. --- Добавлено --- А если в этом показателе нужно будет учитывать какой-то доп. фактор, тогда уже будем думать. Я, кстати, сходу предложил вариант и на этот случай. Такой же адекватный, без всяких кронов. --- Добавлено --- Я начинаю догадываться, чем у вас (в шир. смысле) занимается сервер большую часть времени. Выполнением «крон-задач»
Я худею с вас. Здесь что-то личное задето, старые раны болят? Да пофигу, пусть будет крон Бедный ТС растерялся с такого напора.
Во-во. Пусть будет крон Не всем же писать быстрые приложения. Кому-то нужно и полностью перелопачивать БД каждый день, «потому что крон», «потому что записи не должны застаиваться в своем первозданном состоянии, а то их потенциал улетучится», «потому что...» Конкуренция
@Valick, да, я пока в мыслях понизил планку до часа. Но изначально держал в голове поп. площадки, где зарегано 100500 пользователей. И мне уже поплохело