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

Тема в разделе "PHP", создана пользователем Хомячок, 20 июн 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Хомячок

    Хомячок

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

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

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

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

    Может есть более легкий способ?
     
    krast90 нравится это.
  2. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    при выводе списков объявлений или просмотра конкретного объявления в условии select сделай where d_expire_date>=NOW()

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

    select * from obyavleniya where id_ob=1234 AND D_EXPIRE_DATE>=NOW()
     
    Хомячок нравится это.
  3. Хомячок

    Хомячок

    Регистр.:
    10 апр 2008
    Сообщения:
    184
    Симпатии:
    103
    При этом выведутся непросроченные объявления, а как потом со статусом быть, как его динамички менять без доп. нагрузки, чтоб видеть в админке, какие объявления на модерации, просроченные, опубликованные?
     
    krast90 нравится это.
  4. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    1) хешировать выводимую юзеру информацию. Таким образом если статус записи меняется не часто - сайт будет "статическим" ... БД тупо работать не будет -)
    но если изменение статуса записей или добавление новых производиться очень часто возможно это будет не лучший вариант
    2) админам выводить все как есть ... без хеширования ...
    3) при смене статуса сообщения ( проверено/ истекло время ... ) - обновлять хеш
     
    Хомячок нравится это.
  5. Хомячок

    Хомячок

    Регистр.:
    10 апр 2008
    Сообщения:
    184
    Симпатии:
    103
    Да, с выводом теперь все понятно, хешировать нужно. Только теперь осталось самое интересное: в какой момент производить смену статусов объявлений? ведь если их много будет не буду же я каждый раз все базу перепроверять?
     
    krast90 нравится это.
  6. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    кэшировать или хешировать?

    кэшировать инфу не получится без нагрузки на базу, все равно будет тот же один запрос к базе, чтобы определить обновлялась запись или нет.
     
  7. Хомячок

    Хомячок

    Регистр.:
    10 апр 2008
    Сообщения:
    184
    Симпатии:
    103
    Да, кешировать скорей всего, просто я этим ни разу не занимался)
    Т.е. из всего прочитанного я понял что при входе в доску раз в день допустим нужно выполнять один большой запрос по всем записям для смены статуса объявлений?
     
    krast90 нравится это.
  8. stasdre

    stasdre Постоялец

    Регистр.:
    15 янв 2010
    Сообщения:
    125
    Симпатии:
    18
    Могу посоветовать тебе сделать скрипт который будет сверять дату в БД и сменять статус и скрипт запускать по крону, например раз в день;)
     
  9. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.450
    Симпатии:
    1.244
    Может привязать значение опубликовано\просрочено для админки к дате?
    Те для админа сделать 2 запроса один отдаст записи, для которых D_EXPIRE_DATE>=NOW()
    второй отдаст записи с D_EXPIRE_DATE=<NOW() На БД так будет меньше нагрузки
    Ну а для юзеров только D_EXPIRE_DATE>=NOW()
     
    Хомячок нравится это.
  10. Хомячок

    Хомячок

    Регистр.:
    10 апр 2008
    Сообщения:
    184
    Симпатии:
    103
    По крону это самое простое, но мне нужно без крона обойтись, хостер не поддерживает.

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