Fragment kodu ma za zadanie wypełnić kalendarz rezerwacji samochodów (każde wypełnienie jest równocześnie aktywnym linkiem prowadzącym do szczegółów konkretnej rezerwacji). Teoretycznie wszystko działa, ale wydajność jest fatalna - załadowanie strony trwa od 7 do 11 sekund. Dopiero się uczę PHP i MySql dlatego nie bardzo wiem co mogę zrobić. Z góry dziękuję
$zapytanie5 = "SELECT car_id, car_nazwa, car_cena1, car_cena2, car_cena3, car_cena4, car_cena5 FROM samochody ORDER BY car_nazwa ASC"; $wynik5 = http://www.php.net/mysql_query($zapytanie5); $liczba_pol5 = http://www.php.net/mysql_num_fields($wynik5); while($pole = http://www.php.net/mysql_fetch_array($wynik5)) //ok 15 powtórzeń { for ($i=0;$i<$liczba_pol5;$i=$i+7) { $car_id = $pole[$i]; $car_nazwa = $pole[$i+1]; $cena1=$pole[$i+2]; $cena2=$pole[$i+3]; $cena3=$pole[$i+4]; $cena4=$pole[$i+5]; $cena5=$pole[$i+6]; if ($cena1 == 0 OR $cena2 == 0 OR $cena3 == 0 OR $cena4 == 0 OR $cena5 == 0){ $czy_publikowac='nie'; } else{ $czy_publikowac='tak'; } $zapyt = "select kolor from samochody_kolory where car_id='$car_id'"; $wyn = http://www.php.net/mysql_query($zapyt); $liczba_pol = http://www.php.net/mysql_num_fields($wyn); while($pole_k = http://www.php.net/mysql_fetch_array($wyn)) { for ($i=0;$i<$liczba_pol;$i=$i+1) { $kolor = $pole_k[$i]; } } if ($czy_publikowac=='tak'){ http://www.php.net/echo'<td align="left" width="257" height="30" bgcolor="'.$kolor.'"><font face="Arial"><b>'.$car_nazwa.'</b></font></td>'; } for ($licznik_dzien=1;$licznik_dzien<32;$licznik_dzien=$licznik_dzien+1) { if(http://www.php.net/checkdate($miesiac, $licznik_dzien, $rok)) { $kontrola=0; //------------------ $zapyt001 = "SELECT * FROM tabela_rezerwacji WHERE rez_id_samochod='$car_id' AND rez_data_rok='$rok' AND rez_data_mies='$miesiac' AND rez_data_dzien='$licznik_dzien'"; $wynik001 = http://www.php.net/mysql_query($zapyt001); $liczba_pol = http://www.php.net/mysql_num_fields($wynik001); $liczba_wierszy = http://www.php.net/mysql_num_rows($wynik001); while($pole = http://www.php.net/mysql_fetch_array($wynik001)) { $kontrola=1; } //------------------ $zapyt001 = "SELECT * FROM tabela_rezerwacji WHERE rez_id_samochod='$car_id' AND rez_data_rok='$rok' AND rez_data_mies='$miesiac' AND rez_data_dzien='$licznik_dzien' ORDER BY rez_godzina ASC"; $wynik001 = http://www.php.net/mysql_query($zapyt001); $liczba_pol = http://www.php.net/mysql_num_fields($wynik001); $liczba_wierszy = http://www.php.net/mysql_num_rows($wynik001); if ($kontrola==1 AND $czy_publikowac=='tak'){ http://www.php.net/echo '<td align="center" width="27" height="30" bgcolor="'.$kolor.'"><font face="Arial">'; } if ($kontrola != 1 AND $czy_publikowac=='tak'){ http://www.php.net/echo '<td align="center" width="27" height="30"><font face="Arial"> '; } while($pole = http://www.php.net/mysql_fetch_array($wynik001)) { $rez_id_samochod = $pole[0]; $rez_data_dzien = $pole[1]; $rez_data_mies = $pole[2]; $rez_data_rok = $pole[3]; $rez_godzina = $pole[4]; $rez_minuta = $pole[5]; $rez_zw_godzina = $pole[6]; $rez_zw_minuta = $pole[7]; $rez_nazwisko = $pole[8]; $rez_telefon = $pole[9]; $rez_miejsce_wyn = $pole[10]; $rez_miejsce_zwr = $pole[11]; $rez_uwagi = $pole[12]; $rez_numer = $pole[13]; $kontrola=1; if ($rez_godzina==0){ $rez_godzina='00'; } if ($rez_minuta==0){ $rez_minuta='00'; } if ($rez_zw_godzina==0){ $rez_zw_godzina='00'; } if ($rez_zw_minuta==0){ $rez_zw_minuta='00'; } if ($czy_publikowac=='tak'){ if ($rez_godzina==-77 and $rez_zw_godzina==77){ http://www.php.net/echo '<a title="'.$rez_numer.'" href="kalendarz3.php?zmiana=tak&zm_rok='.$rok.'&zm_miesiac='.$miesiac.'&rez=tak&rez_nr='.$rez_numer.'"><b><font size="2">X</font></b></a><br>'; } if ($rez_godzina!=-77){ http://www.php.net/echo '<a title="'.$rez_numer.'" href="kalendarz3.php?zmiana=tak&zm_rok='.$rok.'&zm_miesiac='.$miesiac.'&rez=tak&rez_nr='.$rez_numer.'"><b><font size="2" color="#004000">'.$rez_godzina.':'.$rez_minuta.'</font></b></a><br>'; } if ($rez_zw_godzina!=77){ http://www.php.net/echo '<a title="'.$rez_numer.'" href="kalendarz3.php?zmiana=tak&zm_rok='.$rok.'&zm_miesiac='.$miesiac.'&rez=tak&rez_nr='.$rez_numer.'"><b><font size="2" color="#B00000">'.$rez_zw_godzina.':'.$rez_zw_minuta.'</font></b></a><br>'; } } } http://www.php.net/echo '</font></td>'; } } http://www.php.net/echo '</tr>'; } }
Nudziło mi się Nie wiem czy działa, pewnie jakies błędy wywali ale masz ogólny zarys co możesz poprawiać.
Ogólnie dużo zapytań wykonujesz. Poprzeglądaj i przeanalizuj.
$zapytanie5 = " SELECT car_id, car_nazwa, car_cena1, car_cena2, car_cena3, car_cena4, car_cena5, kolor FROM samochody s LEFT JOIN samochody_kolory sk ON(sk.car_id = s.id) ORDER BY car_nazwa ASC"; $wynik5 = http://www.php.net/mysql_query($zapytanie5); $liczba_pol5 = http://www.php.net/mysql_num_fields($wynik5); while ($pole = http://www.php.net/mysql_fetch_array($wynik5)) //ok 15 powtórzeń { $car_id = $pole[0]; $car_nazwa = $pole[1]; $cena1 = $pole[2]; $cena2 = $pole[3]; $cena3 = $pole[4]; $cena4 = $pole[5]; $cena5 = $pole[6]; $kolor = $pole[7]; $czy_publikowac = ($cena1 && $cena2 && $cena3 && $cena4 && $cena5) ? 'tak' : 'nie'; if ($czy_publikowac == 'tak') { http://www.php.net/echo '<td align="left" width="257" height="30" bgcolor="' . $kolor . '"><font face="Arial"><b>' . $car_nazwa . '</b></font></td>'; } $zapyt001 = " SELECT * FROM tabela_rezerwacji WHERE rez_id_samochod='$car_id' AND rez_data_rok='$rok' AND rez_data_mies='$miesiac' -- AND rez_data_dzien='$licznik_dzien' ORDER BY rez_data_dzien ASC rez_godzina ASC"; $wynik001 = http://www.php.net/mysql_query($zapyt001); $rezerwacje = http://www.php.net/array(); while($rezerwacja = http://www.php.net/mysql_fetch_array($wynik001)) { $rezerwacje[$rezerwacja['rez_data_dzien']] = $rezerwacja; } for ($licznik_dzien = 1; $licznik_dzien < 32; $licznik_dzien = $licznik_dzien + 1) { if (http://www.php.net/checkdate($miesiac, $licznik_dzien, $rok)) { if($czy_publikowac == 'tak' && !http://www.php.net/array_key_exists($licznik_dzien, $rezerwacje)) { http://www.php.net/echo '<td align="center" width="27" height="30"><font face="Arial"> </font></td>'; continue; } elseif ($czy_publikowac == 'tak') { http://www.php.net/echo '<td align="center" width="27" height="30" bgcolor="' . $kolor . '"><font face="Arial">'; } foreach($rezerwacje[$licznik_dzien] as $pole) { $rez_id_samochod = $pole[0]; $rez_data_dzien = $pole[1]; $rez_data_mies = $pole[2]; $rez_data_rok = $pole[3]; $rez_godzina = $pole[4]; $rez_minuta = $pole[5]; $rez_zw_godzina = $pole[6]; $rez_zw_minuta = $pole[7]; $rez_nazwisko = $pole[8]; $rez_telefon = $pole[9]; $rez_miejsce_wyn = $pole[10]; $rez_miejsce_zwr = $pole[11]; $rez_uwagi = $pole[12]; $rez_numer = $pole[13]; $kontrola = 1; if ($rez_godzina == 0) { $rez_godzina = '00'; } if ($rez_minuta == 0) { $rez_minuta = '00'; } if ($rez_zw_godzina == 0) { $rez_zw_godzina = '00'; } if ($rez_zw_minuta == 0) { $rez_zw_minuta = '00'; } if ($czy_publikowac == 'tak') { if ($rez_godzina == -77 and $rez_zw_godzina == 77) { http://www.php.net/echo '<a title="' . $rez_numer . '" href="kalendarz3.php?zmiana=tak&zm_rok=' . $rok . '&zm_miesiac=' . $miesiac . '&rez=tak&rez_nr=' . $rez_numer . '"><b><font size="2">X</font></b></a><br>'; } if ($rez_godzina != -77) { http://www.php.net/echo '<a title="' . $rez_numer . '" href="kalendarz3.php?zmiana=tak&zm_rok=' . $rok . '&zm_miesiac=' . $miesiac . '&rez=tak&rez_nr=' . $rez_numer . '"><b><font size="2" color="#004000">' . $rez_godzina . ':' . $rez_minuta . '</font></b></a><br>'; } if ($rez_zw_godzina != 77) { http://www.php.net/echo '<a title="' . $rez_numer . '" href="kalendarz3.php?zmiana=tak&zm_rok=' . $rok . '&zm_miesiac=' . $miesiac . '&rez=tak&rez_nr=' . $rez_numer . '"><b><font size="2" color="#B00000">' . $rez_zw_godzina . ':' . $rez_zw_minuta . '</font></b></a><br>'; } } } http://www.php.net/echo '</font></td>'; } } http://www.php.net/echo '</tr>'; }
Bardzo dziękuję za pomoc.
Wyciągnąłem zapytania do bazy danych na zewnątrz pętli, a wszystkie operacje wykonałem na tablicach.
Prędkość przetwarzania po stronie serwera wzrosła (aż ciężko uwierzyć ) z 7-11 sekund do 0.025-0,035 sekundy!
Wklejam działający kod i pozdrawiam:
$zapyt001 = "SELECT * FROM tabela_rezerwacji WHERE rez_data_rok='$rok' AND rez_data_mies='$miesiac' ORDER BY rez_godzina ASC"; $wynik001 = http://www.php.net/mysql_query($zapyt001); $dane = http://www.php.net/array(); $z = 0; $h = 0; while ($r = http://www.php.net/mysql_fetch_array($wynik001)){ $dane[] = $r; $z = $z + 1; } $zapytanie5 = "SELECT samochody.car_id, samochody.car_nazwa, samochody.car_cena1, samochody.car_cena2, samochody.car_cena3, samochody.car_cena4, samochody.car_cena5, samochody_kolory.kolor FROM samochody JOIN samochody_kolory ON samochody.car_id = samochody_kolory.car_id ORDER BY car_nazwa ASC"; $wynik5 = http://www.php.net/mysql_query($zapytanie5); $liczba_pol5 = http://www.php.net/mysql_num_fields($wynik5); while($pole = http://www.php.net/mysql_fetch_array($wynik5)) { for ($i=0;$i<$liczba_pol5;$i=$i+8) { $car_id = $pole[$i]; $car_nazwa = $pole[$i+1]; $cena1=$pole[$i+2]; $cena2=$pole[$i+3]; $cena3=$pole[$i+4]; $cena4=$pole[$i+5]; $cena5=$pole[$i+6]; $kolor=$pole[$i+7]; if ($cena1 == 0 OR $cena2 == 0 OR $cena3 == 0 OR $cena4 == 0 OR $cena5 == 0){ $czy_publikowac='nie'; } else{ $czy_publikowac='tak'; } if ($czy_publikowac=='tak'){ http://www.php.net/echo'<td align="left" width="257" height="35" bgcolor="'.$kolor.'"><font face="Arial"><b>'.$car_nazwa.'</b></font></td>'; } for ($licznik_dzien=1;$licznik_dzien<32;$licznik_dzien=$licznik_dzien+1) { if(http://www.php.net/checkdate($miesiac, $licznik_dzien, $rok)) { $kontrola=0; for($i = 0; $i<$z; $i++) { if($dane[$i]['rez_id_samochod'] == $car_id && $dane[$i]['rez_data_dzien'] == $licznik_dzien){ $kontrola = 1; $h = $i; break; } } if ($kontrola==1 AND $czy_publikowac=='tak'){ if($licznik_dzien==$dzien){ http://www.php.net/echo '<td align="center" width="27" height="35" bgcolor="'.$kolor.'" style="border-left: 3px solid #000000; border-right: 3px solid #000000"><font face="Arial">'; } else { http://www.php.net/echo '<td align="center" width="27" height="35" bgcolor="'.$kolor.'"><font face="Arial">'; } } if ($kontrola != 1 AND $czy_publikowac=='tak'){ if($licznik_dzien==$dzien){ http://www.php.net/echo '<td align="center" width="27" height="35" style="border-left: 3px solid #000000; border-right: 3px solid #000000"><font face="Arial"> '; } else { http://www.php.net/echo '<td align="center" width="27" height="35"><font face="Arial"> '; } } for($h = $h; $h<$z; $h++) { if($dane[$h]['rez_id_samochod'] == $car_id && $dane[$h]['rez_data_dzien'] == $licznik_dzien){ $rez_id_samochod = $dane[$h]['rez_id_samochod']; $rez_data_dzien = $dane[$h]['rez_data_dzien']; $rez_data_mies = $dane[$h]['rez_data_mies']; $rez_data_rok = $dane[$h]['rez_data_rok']; $rez_godzina = $dane[$h]['rez_godzina']; $rez_minuta = $dane[$h]['rez_minuta']; $rez_zw_godzina = $dane[$h]['rez_zw_godzina']; $rez_zw_minuta = $dane[$h]['rez_zw_minuta']; $rez_nazwisko = $dane[$h]['rez_nazwisko']; $rez_telefon = $dane[$h]['rez_telefon']; $rez_miejsce_wyn = $dane[$h]['rez_miejsce_wyn']; $rez_miejsce_zwr = $dane[$h]['rez_miejsce_zwr']; $rez_uwagi = $dane[$h]['rez_uwagi']; $rez_numer = $dane[$h]['rez_numer']; if ($rez_godzina==0){ $rez_godzina='00'; } if ($rez_minuta==0){ $rez_minuta='00'; } if ($rez_zw_godzina==0){ $rez_zw_godzina='00'; } if ($rez_zw_minuta==0){ $rez_zw_minuta='00'; } if ($czy_publikowac=='tak'){ if ($rez_godzina==-77 and $rez_zw_godzina==77){ http://www.php.net/echo '<a title="'.$rez_numer.'" href="kalendarz.php?zmiana=tak&zm_rok='.$rok.'&zm_miesiac='.$miesiac.'&rez=tak&rez_nr='.$rez_numer.'"><b><font size="2">X</font></b></a><br>'; } if ($rez_godzina!=-77){ http://www.php.net/echo '<a title="'.$rez_numer.'" href="kalendarz.php?zmiana=tak&zm_rok='.$rok.'&zm_miesiac='.$miesiac.'&rez=tak&rez_nr='.$rez_numer.'"><b><font size="2" color="#004000">'.$rez_godzina.':'.$rez_minuta.'</font></b></a><br>'; } if ($rez_zw_godzina!=77){ http://www.php.net/echo '<a title="'.$rez_numer.'" href="kalendarz.php?zmiana=tak&zm_rok='.$rok.'&zm_miesiac='.$miesiac.'&rez=tak&rez_nr='.$rez_numer.'"><b><font size="2" color="#B00000">'.$rez_zw_godzina.':'.$rez_zw_minuta.'</font></b></a><br>'; } } } } http://www.php.net/echo '</font></td>'; } } http://www.php.net/echo '</tr>'; } }
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)