Убрать объявление по наступлению даты

Статус
В этой теме нельзя размещать новые ответы.

Хомячок

Хранитель порядка
Регистрация
10 Апр 2008
Сообщения
184
Реакции
576
Переделываю доску объявлений и хочу реализовать функцию, чтобы объявление убиралось по наступлению определенной даты. И тут возник вопрос, как сделать это, чтоб было меньше всего нагрузки на сайт. Хотелось бы узнать ваше мнение, может там все проще чем я думаю. Дата публикации и дата снятия с публикации хранятся в бд. Поле статус (на модерации, опубликовано, просрочено) тоже.

Мои варианты:
1. Когда любой пользователь заходит посмотреть доску объявлениий, перед их выводом сравниваются дата публ. и дата снятия и снимаются последовательно все просроченные. (делается запрос в бд на изменение статуса каждого) Минусы - большая нагрузка на сайт.

2. Также каждый раз просматривать обявление со сравнением даты и просто не выводить просроченные. Минус - в админ панели нельзя посмотреть статус (просрочено или опубликовано? будет всегда опубликовано)

3. Менять статусы раз день при заходе пользователя в доску (т.к. срок все равно измеряется в днях и можно постоянно не менять статусы). Тоже нагружается сайт, но лучше чем в 1.

Может есть более легкий способ?
 
при выводе списков объявлений или просмотра конкретного объявления в условии select сделай where d_expire_date>=NOW()

d_expire_date - дата, до которого объявление должно показываться

select * from obyavleniya where id_ob=1234 AND D_EXPIRE_DATE>=NOW()
 
при выводе списков объявлений или просмотра конкретного объявления в условии select сделай where d_expire_date>=NOW()
d_expire_date - дата, до которого объявление должно показываться
select * from obyavleniya where id_ob=1234 AND D_EXPIRE_DATE>=NOW()
При этом выведутся непросроченные объявления, а как потом со статусом быть, как его динамички менять без доп. нагрузки, чтоб видеть в админке, какие объявления на модерации, просроченные, опубликованные?
 
1) хешировать выводимую юзеру информацию. Таким образом если статус записи меняется не часто - сайт будет "статическим" ... БД тупо работать не будет -)
но если изменение статуса записей или добавление новых производиться очень часто возможно это будет не лучший вариант
2) админам выводить все как есть ... без хеширования ...
3) при смене статуса сообщения ( проверено/ истекло время ... ) - обновлять хеш
 
Да, с выводом теперь все понятно, хешировать нужно. Только теперь осталось самое интересное: в какой момент производить смену статусов объявлений? ведь если их много будет не буду же я каждый раз все базу перепроверять?
 
кэшировать или хешировать?

кэшировать инфу не получится без нагрузки на базу, все равно будет тот же один запрос к базе, чтобы определить обновлялась запись или нет.
 
Да, кешировать скорей всего, просто я этим ни разу не занимался)
Т.е. из всего прочитанного я понял что при входе в доску раз в день допустим нужно выполнять один большой запрос по всем записям для смены статуса объявлений?
 
Могу посоветовать тебе сделать скрипт который будет сверять дату в БД и сменять статус и скрипт запускать по крону, например раз в день;)
 
Могу посоветовать тебе сделать скрипт который будет сверять дату в БД и сменять статус и скрипт запускать по крону, например раз в день;)
По крону это самое простое, но мне нужно без крона обойтись, хостер не поддерживает.

*** скрытое содержание ***
Да, думаю это наилучший вариант будет. Тут выяснилось что еще каждый пользователь может просматривать свои объявления в спец разделе и смотреть их статус. Буду делать, если что не получится спрошу)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху