За последние 24 часа нас посетили 35411 программистов и 1814 роботов. Сейчас ищут 896 программистов ...

Помогите с ускорением вывода результата.

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

  1. Eser

    Eser Активный пользователь

    С нами с:
    16 янв 2007
    Сообщения:
    141
    Симпатии:
    0
    Подскажите как ускорить вывод результата?
    На странице пользователя нужно считать кол просроченных заявок и записывать это кол-во дней в таблицу.

    Вот таблица:
    [sql]create table $name_table
    (id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id),//Индексное поле
    status varchar(10),//Статус заявки(done-заявка закрыта,overstay-просроченна)
    id_user_isp varchar(70),//Идентификатор пользователя
    days_alert varchar(10),//Кол-во дней на которые просрочена заявка
    date_to_isp date//Дата получения заявки
    );");[/sql]

    Вот код который нужно ускорить:

    PHP:
    1. $select_overstay=mysql_query("select id,date_to_isp,date_to_done from $data_temp_name[temp_name] where id_user_isp='$_SESSION[id]' and  status!='done';");
    2. $count_overstay=mysql_num_rows($select_overstay);
    3.  
    4. for($n=0;$n<$count_overstay;$n++)
    5. {
    6. require('../other_page/date_between.php'); //Здесь считаеться $age
    7.  
    8. if($age>2)//разница в днях после которой считать заявку просроченной
    9. {
    10. $razn=abs($age-2);
    11. $data=mysql_fetch_array($select_overstay);
    12. $update_overstay=mysql_query("update $data_temp_name[temp_name] set status='overstay',days_alert='$razn' where id='$data[id]' ;");
    13. }
    14. }
    15.  
    Сейчас в таблице 10000 тыс записей и процедура обновления кол-ва просроченных дней тормозит.
     
  2. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    А зачем в цикле файл инклюдить? Вынеси из цикла

    10000 записей, соответственно у тебя
    выполняется 10 000 раз? Я думаю, тут одним запросом можно сделать
     
  3. Eser

    Eser Активный пользователь

    С нами с:
    16 янв 2007
    Сообщения:
    141
    Симпатии:
    0
    А как вне цикла инклудить если в нем находиться $age у каждой заявки свое значение.
    Да update и условие выполняется 10000 тыс. раз. И повторяется снова при каждом обновлении страницы.
    Я так понимаю что индексирование здесь ничего не даст.
     
  4. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    нифига не понял
     
  5. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Eser
    сядь, подумай, представь, что ты - компьютер, и тебе нужно делать эти вычисления самому вручную. иногда помогает :)

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

    через сколько дней заявка считается просроченной? является ли это число разным для разных заявок?
    нафиг хранить кол-во просроченных дней в базе, когда его можно вычислять динамически?
    а статус могу посоветовать хранить в виде int-а

    при таком подходе обновление базы не нужно, в базе хранится только дата поступления заявки,
    а вычисление просроченных дней происходит автоматически, так же как и подсчёт количества,
    и вывод пользователю и прочеее, и прочее...
     
  6. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    массивы велкам ?
    $i++
    после выборкой из массива строишь переменные для запроса/вывода что там надо.
    вроде правильно понял =)