| |
|
|
| | Подскажите пожалуйста как это дело можно упростить или заменить чем-нибудь!
Суть всего этого процесса, это сначала удалить все старые сообщения, все сообщения имеют срок хранения, а потом вывести все более менее новые!
Грубо называя, всё это доска обьявлений! :-))
// Запрашиваем номер и число дней которое оно должно храниться
$slc = mysql_query("SELECT id_msg, save FROM msg");
while ($del = mysql_fetch_array($slc))
{
// Удаляем все сообщения срок которых вышел
$del_msg = mysql_query("DELETE FROM msg WHERE id_msg='$del['id_msg']' and date<NOW() - INTERVAL $del['save'] DAY");
}
$desk = mysql_query("SELECT * FROM msg WHERE show_msg='1' ORDER BY date DESC LIMIT 3");
|
Просто в WEB сервер всю процедуру очень долго выполняет!
Может у кого-то есть мысли как осуществить принцеп такой работы по другому!
Буду благодарен за наведения! | |
| |
|
|
| |
|
|
| |
для: Artemy
(19.01.2005 в 17:03)
| | | А зачем удалять сообщения из таблицы?
В своей табличке msg храни все сообщения, но только добавь два служебных поля FROM_DATE и TO_DATE. Эти поля будут отражать период, в течение которого это сообщение актуально.
При выводе сообщений просто выбирай те, для которых текущая дата находится в промежутке между этими двумя. | |
| |
|
|
| |
|
|
| |
для: Egor
(19.01.2005 в 17:42)
| | | Согласен можно и не удалять, просто в данной случае так!
Ну а если как Вы говорите тогда нужно будет придумать механизм, добавления и формирования даты, до которой храниться сообщений, что вызвает ряд проблем, например если это поле <select> , то не в каждом месяце есть 31 день, вот представьте пользователь специально захочет ввести 31 февраля, и что тогда! Ошибка, которая для меня неизвестно как отразиться, можно в данном случае приминить JS, но к сожалению я не обладаю знаниями в этой области, а найти такой скрипт, который бы показывал для каждого месяца года свое количество дней, я не в силах!
По-этому обращаюсь за помощью! | |
| |
|
|
| |
|
|
| |
для: Artemy
(19.01.2005 в 17:54)
| | | В любом случае, считаю правильнее будет проверять на корректность введенные пользователем данные, иначе такой бардак в базе начнется.
Что же касается дат периода опубликования. Есть два подхода. Первый: просить ввести дату начала и дату конца периода (они обе могут быть и в будущем). Тогда средствами PHP корректность дат можно проверить функцией checkdate, и в случае неправильных данных информировать об этом пользователя. Второй: просить ввести только дату начала, ее, кстати, тоже нужно проверить, и количество дней. Потом уже средствами MySQL прибавлять к дате начала публикации необходимое кол-во дней. Это делает функция DATE_ADD.
Описания функций
CheckDate http://www.softtime.ru/dic/id_dic=192&id_group=7
Date_Add http://www.mysql.ru/docs/man/Date_and_time_functions.html | |
| |
|
|
| |
|
|
| |
для: Egor
(19.01.2005 в 18:52)
| | | Большое спасибо!
Надо поработать с checkdate, я о ней раньше не знал или наверно забыл о такой! :-)) | |
| |
|
|
| |
|
|
| |
для: Artemy
(19.01.2005 в 17:03)
| | | А зачем вы удаляете все записи по одной. Удаляйте их все сразу.
DELETE FROM msg WHERE date<NOW() - INTERVAL $num_days DAY
|
$num_days - количество дней. | |
| |
|
|
| |
|
|
| |
для: glsv (Дизайнер)
(19.01.2005 в 21:43)
| | | Дело в том что у каждой записи, есть свой срок хранения(в днях)
поэтому и приходиться делать так
<?
$del_msg = mysql_query("DELETE FROM msg WHERE id_msg='$del['id_msg']' and date<NOW() - INTERVAL $del['save'] DAY");
?>
|
| |
| |
|
|
| |
|
|
| |
для: Artemy
(20.01.2005 в 15:00)
| | | А возможно сделать так, вносить дату в БД c помощью NOW(), а к ней уже прибавлять количество дней, которое оно будет храниться, пример так
<?
$query = "INSERT INTO table VALUES ('', '$msg', NOW(), NOW()+30)";
?>
|
| |
| |
|
|
| |
|
|
| |
для: Artemy
(20.01.2005 в 15:13)
| | | Да можно, только запрос в этом случае будет выглядеть
INSERT INTO table VALUES ('', '$msg', NOW(), NOW() + INTERVAL 30 DAY
|
| |
| |
|
|
| |
|
|
| |
для: cheops
(20.01.2005 в 18:18)
| | | Большое спасибо, что бы я без Вас делал, наверно забросил бы это WEB програмирование по-дальше, и только HTMLлил!!! :-)) | |
| |
|
|