[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Удаление записи из БД по истечении времени
zet-msh
Здравствуйте форумчане. В общем долго искал выход, но к сожалению так его и не нашел.

Суть в том, что пишу доску объявлений, соответственно при добавлении объявления оно добавляется в таблицу X и остается там на все время, а меня интересует чтобы при добавлении человек указав срок например неделя, две или три, сообщение по истечении этого времени удалялось, в какждой записи есть автоматическая дата ее добавления CURRENT_TIMESTAMP, так вот как реализовать удаление когда нам известна дата добавления?
KAMAEL
Нужно создать тогда еще или запись с датой удаления, или запись с количеством времени на жизнь твоей записи (в unix формате). Ну и гдето сделать проверялку, закунчился срок годности или нет.
sergeiss
Сделай скрипт, который запускается раз в сутки. И просто тупо удаляй те записи, которые старше некоторого времени. Не вижу проблемы, честно говоря smile.gif
Опять же, если дата удаления известна уже на момент создания записи, то вообще всё просто решается. Делаешь отдельное поле, где указана "дата смерти". И по ее достижении этот твой скрипт (см. предыдущий абзац) удаляет все записи, которые достигли этой даты.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
lastdays
Предположим у нас две ячейки в таблице:

time_start = время когда добавил запись.
time_end = время, когда запись нужно удалить.


При добавлении новости в ячейку time_end записывай
time()+3600 к примеру, что равно настоящему времени + 1 час.
Как сказали выше, файл с проверкой нужно ставить на крон.

С учетом большого кол-во записей, через while удалять.

Пример cron файла:




$doska = mysql_query("SELECT `id`FROM `doska` WHERE `time_end`<='".time()."' and `time_end`>0");
while ($d = mysql_fetch_array($doska)){
mysql_query("DELETE FROM `doska` WHERE `id`='".$d["id"]."'");
}

Shkiper
Ну. в бд записывай дату когда она должна удалится. И допустим если пользователь зашел на обьявление то проверяй если дата удаление меньше текущей даты то удаляй ее и выдавай пользователю что обьвления такого НЕТ
T1grOK
Цитата (lastdays @ 21.09.2012 - 09:32)
Предположим у нас две ячейки в таблице:

time_start = время когда добавил запись.
time_end = время, когда запись нужно удалить.


При добавлении новости в ячейку time_end записывай
time()+3600 к примеру, что равно настоящему времени + 1 час.
Как сказали выше, файл с проверкой нужно ставить на крон.

С учетом большого кол-во записей, через while удалять.

Пример cron файла:




$doska = mysql_query("SELECT `id`FROM `doska` WHERE `time_end`<='".time()."' and `time_end`>0");
while ($d = mysql_fetch_array($doska)){
mysql_query("DELETE FROM `doska` WHERE `id`='".$d["id"]."'");
}


Улыбнуло))
Не проще так?

mysql_query("DELETE FROM `doska` WHERE `time_end`<='".time()."'");


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
lastdays
Проще, на много user posted image
Но во избежании возможных ошибок или дополнительных проверок, от запроса не убудит.
neadekvat
Цитата (lastdays @ 21.09.2012 - 19:53)
Но во избежании возможных ошибок или дополнительных проверок, от запроса не убудит.

Проще лучше, чем сложнее.
inpost
Каких, интересно, возможных ошибках?! В них надо разбираться, а не городить из 100 бревен - лавочку!
А запускать удаление повесь на крон и всё.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
lastdays
Я же не спорю с тобой ( утверждая обратное), твой вариант лучше и не требует дополнительных затрат.

Я же просто показал человеку пример, как должно/может выглядеть. А о его полной идеи по удалению сообщений через определённый срок , я не знаю.
twin
T1grOK
тогда уж так...
mysql_query("DELETE FROM `doska` WHERE `time_end`< NOW() - INTERVAL 10 DAY");

а про крон... Есть анекдот. Мужик приходит к терапевту - у меня член болит.
Хирург сказал ампутировать(( Да ну... Вот таблетка. Сам отвалится, им хирургам все бы резать.

Зачем крон то тут, тут то как раз проще на событие повешать. Ну если траф только слишком большой. Большой. Не средний. При среднем можно и так обойтись:
if(rand(1,10) == 5)
//запрос
Ну или реже... Или чаще.)))

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
inpost
А если кто-то не зайдет, или трафик будет огромный. Слишком дубовый способ, крон то будет иметь максимальный контроль за количеством удалений.
+ удаление занимает слишком долго времени.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
twin
Я вас умоляю...
Вообще конечно верная тенденция снижать нагрузку. Но в 99% случаев это просто смешно.

Ну расскажите мне пожалуйста, сколько таких сайтов, где можно боятся нагрузки при добавлении чего-то в доску объявлений. Я эту то хрень (с рандомом) написал чисто гипотетически. На самом деле все гораздо прозаичнее.

Крон не возбраняется, но надо ли он? По твоей же аналогии - он будет жрать ресурса больше, если объявление будет добавляться раз в сутки, а крон начнет работать раз в час rolleyes.gif
Свернутый текст
(хрен знает что этот смайлик обозначает, но очень уж нравицо))))


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
lastdays
twin, с Вами тяжело согласится.

Нужно хотя бы стараться писать более грамотно. А не с использованием rand() .

Тут два нюанса точно есть.
1) если посетителей нет на сайте - соответственно удаление новостей невозможно.
2) при большом наплыве посетителей, постоянно "чекается" проверка, это ни к чему хорошему не приведет.

Когда крон, раз в сутки запускает и делает свою работу, а ещё лучше будет выполнять его в ночное время, т.к. в принципе ночью люди спят.

п.с. Обязательно нужно боятся нагрузки от честных пользователей, или все же стоит "заботится" и о нечестных? rolleyes.gif

смайлик говорит нам, что - то вида : классно / круто!
neadekvat
Цитата (lastdays @ 22.09.2012 - 01:37)
1) если посетителей нет на сайте - соответственно удаление новостей невозможно.

И, более того, оно бессмысленно.

Цитата (lastdays @ 22.09.2012 - 01:37)
2) при большом наплыве посетителей, постоянно "чекается" проверка, это ни к чему хорошему не приведет.

А вот что такое "большой наплыв" и когда он "к хорошему не приведет" - проверяется на практике, на кофейной гуще гадать смысла нет.

Цитата (lastdays @ 22.09.2012 - 01:37)
а ещё лучше будет выполнять его в ночное время, т.к. в принципе ночью люди спят.

Если сайт пользуется популярностью, то, пардон, что такое "ночь"? Ночь для кого? Опять для москвичей?

Но в целом, я бы выбрал вариант с кроном - контролировать проще.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.