Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Упростить это просто...
 
 автор: Artemy   (19.01.2005 в 17:03)   письмо автору
 
 

Подскажите пожалуйста как это дело можно упростить или заменить чем-нибудь!
Суть всего этого процесса, это сначала удалить все старые сообщения, все сообщения имеют срок хранения, а потом вывести все более менее новые!
Грубо называя, всё это доска обьявлений! :-))
 
// Запрашиваем номер и число дней которое оно должно храниться
$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 сервер всю процедуру очень долго выполняет!

Может у кого-то есть мысли как осуществить принцеп такой работы по другому!
Буду благодарен за наведения!

   
 
 автор: Egor   (19.01.2005 в 17:42)   письмо автору
 
   для: Artemy   (19.01.2005 в 17:03)
 

А зачем удалять сообщения из таблицы?
В своей табличке msg храни все сообщения, но только добавь два служебных поля FROM_DATE и TO_DATE. Эти поля будут отражать период, в течение которого это сообщение актуально.
При выводе сообщений просто выбирай те, для которых текущая дата находится в промежутке между этими двумя.

   
 
 автор: Artemy   (19.01.2005 в 17:54)   письмо автору
 
   для: Egor   (19.01.2005 в 17:42)
 

Согласен можно и не удалять, просто в данной случае так!
Ну а если как Вы говорите тогда нужно будет придумать механизм, добавления и формирования даты, до которой храниться сообщений, что вызвает ряд проблем, например если это поле <select> , то не в каждом месяце есть 31 день, вот представьте пользователь специально захочет ввести 31 февраля, и что тогда! Ошибка, которая для меня неизвестно как отразиться, можно в данном случае приминить JS, но к сожалению я не обладаю знаниями в этой области, а найти такой скрипт, который бы показывал для каждого месяца года свое количество дней, я не в силах!
По-этому обращаюсь за помощью!

   
 
 автор: Egor   (19.01.2005 в 18:52)   письмо автору
 
   для: 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

   
 
 автор: Artemy   (20.01.2005 в 15:07)   письмо автору
 
   для: Egor   (19.01.2005 в 18:52)
 

Большое спасибо!
Надо поработать с checkdate, я о ней раньше не знал или наверно забыл о такой! :-))

   
 
 автор: glsv (Дизайнер)   (19.01.2005 в 21:43)   письмо автору
 
   для: Artemy   (19.01.2005 в 17:03)
 

А зачем вы удаляете все записи по одной. Удаляйте их все сразу.


DELETE FROM msg WHERE date<NOW() - INTERVAL $num_days DAY

$num_days - количество дней.

   
 
 автор: Artemy   (20.01.2005 в 15:00)   письмо автору
 
   для: 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:13)   письмо автору
 
   для: Artemy   (20.01.2005 в 15:00)
 

А возможно сделать так, вносить дату в БД c помощью NOW(), а к ней уже прибавлять количество дней, которое оно будет храниться, пример так
<?
$query 
"INSERT INTO table VALUES ('', '$msg', NOW(), NOW()+30)";
?>

   
 
 автор: cheops   (20.01.2005 в 18:18)   письмо автору
 
   для: Artemy   (20.01.2005 в 15:13)
 

Да можно, только запрос в этом случае будет выглядеть
INSERT INTO table VALUES ('', '$msg', NOW(), NOW() +  INTERVAL 30 DAY

   
 
 автор: Artemy   (20.01.2005 в 18:29)   письмо автору
 
   для: cheops   (20.01.2005 в 18:18)
 

Большое спасибо, что бы я без Вас делал, наверно забросил бы это WEB програмирование по-дальше, и только HTMLлил!!! :-))

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования