Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SKRYPT Optymalizacja
Forum PHP.pl > Forum > PHP
cinnek
Witam wszystkich


mam sobie taka funkcje dodająca rekordy do bazy danych, parametrami funkcji są tablica z pozycjami zamówienia oraz ID zamowienia. Prodblem polega na tym że gdy ta tablica jest duża np 9999 rekordów to skrypt wykonuje się bardzo długo i sewer wywala że przekroczono dozwolony czas wykonania skryptu.

Łązcenie stringów wykonuje się za długo.

Może ktoś z was wie jak to zrobic lepiej,
Bardzo prosze o pomoc

oto wspomniana funkcja:
  1. <?php
  2.  
  3. function zapiszDane($Tablica_rekordow,$ID_zamowienia){
  4.  
  5.      //tam gdzie w tablicy rekordów jest puste pole (np. brak materiału bo nie jest wymagany) trzeba wpisać null
  6.      for($i=0;$i<count($Tablica_rekordow);$i++){
  7.           if($Tablica_rekordow[$i][2]==&#092;"\") $Tablica_rekordow[$i][2]=\"NULL\";
  8.           if($Tablica_rekordow[$i][4]==&#092;"\") $Tablica_rekordow[$i][4]=\"NULL\";
  9.           if($Tablica_rekordow[$i][6]==&#092;"\") $Tablica_rekordow[$i][6]=\"NULL\";
  10.      }
  11.      
  12.      
  13.      $i=0;
  14.  
  15.      $tekst=&#092;"\";
  16.  
  17.      for($i=0;$i<count($Tablica_rekordow);$i++){
  18.         for($k=0;$k<$Tablica_rekordow[$i][8];$k++){
  19.           if(($i==0) && ($k==0)) //pierwszy raz na początku bez przecinka
  20.                $tekst=$tekst.&#092;"(\".$Tablica_rekordow[$i][0].\",\".$ID_zamowienia.\",\".$Tablica_rekordow[$i][2].\",\".$Tablica_rekordow[$i][4].\",\"
  21.                            .$Tablica_rekordow[$i][6].&#092;",\".$Tablica_rekordow[$i][9].\")\";
  22.           else
  23.                $tekst=$tekst.&#092;",(\".$Tablica_rekordow[$i][0].\",\".$ID_zamowienia.\",\".$Tablica_rekordow[$i][2].\",\".$Tablica_rekordow[$i][4].\",\"
  24.                            .$Tablica_rekordow[$i][6].&#092;",\".$Tablica_rekordow[$i][9].\")\";
  25.  
  26.         }
  27.      }
  28.  
  29.  
  30.         $query=&#092;"INSERT into zamowienia_relacje (Produkt_ID,ID_Zamowienia,Zestaw_ID,Drewno_ID,Material_ID,Cena) VALUES \".$tekst;
  31.  
  32.         $res = mysql_query($query);
  33.         if(!$res)  return false;
  34.         else return true;
  35. }
  36.  
  37. ?>


zapomniałem dodać że $Tablica_rekordow[$i][8] zawiera ilość danego produktu na zamówieniu czyli np.jesli ktoś chce 10 książek to tam jest liczba 10 . i ja chce żeby mi wstawiło 10 rekordów do tabeli.problem jest wtedy gdy tam jest duz liczba np 5000.
nospor
Po pierwsze nie ma sensu ustwaiać wartości null w tej pierwszej pętli. Przelatujesz wtedy po calej tablicy niepotrzebnie. Ustawiaj to już w tej glownej petli, zaoszczędzisz na niepotrzebnych iteracjach.
Po drugie po co ci drugi for po k. Zapisujesz wtedy te same dane poraz kolejny i - ty raz. Czy to napewno potrzebne?
cinnek
Cytat(nospor @ 2005-03-21 10:13:24)
Po drugie po co ci drugi for po k. Zapisujesz wtedy te same dane poraz kolejny i - ty raz. Czy to napewno potrzebne?

Tak to jest bardzo potrzebne bo każdy element ma mieć unikatowe ID czyli np.jak na zamóweiniu zamówi jakiegoś produktu 100 szt to każda sztuka ma mieć swój nr identyfikacyjny
nospor
aha, ale ta pierwsza uwaga powinna ci chyba trochę przyspieszyć. Ponadto ustaw se w php.ini czas wykonywania skryptu na większy
cinnek
Pierwsza sprawa pomogła(dzięki) ale skrypt dalej jest dość wolny.Zawsze mogę ustawić żeby ilość produktu na zamówieniu nie była większa od 999 ale wydaje mi sie że nie w tym rzecz
nospor
No wiesz, przy dużej ilości wpisów do bazy no niestety to trochę potrwa. Ja swego czasu pisałem skrytpy, któe importowały i exportowały kilkadziesiąt tysięcy rekordów bazy. No i niestety ale musiałem zwiększyć czas wykonywania skryptu. Czasami bez tego się nie obejdzie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.