Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z optymalizacją - słaba wydajność kodu
primo83
post 29.01.2015, 10:30:37
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 29.01.2015

Ostrzeżenie: (0%)
-----


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ę




  1. $zapytanie5 = "SELECT car_id, car_nazwa, car_cena1, car_cena2, car_cena3, car_cena4, car_cena5 FROM samochody ORDER BY car_nazwa ASC";
  2. $wynik5 = mysql_query($zapytanie5);
  3. $liczba_pol5 = mysql_num_fields($wynik5);
  4. while($pole = mysql_fetch_array($wynik5)) //ok 15 powtórzeń
  5. {
  6. for ($i=0;$i<$liczba_pol5;$i=$i+7)
  7. {
  8. $car_id = $pole[$i];
  9. $car_nazwa = $pole[$i+1];
  10. $cena1=$pole[$i+2];
  11. $cena2=$pole[$i+3];
  12. $cena3=$pole[$i+4];
  13. $cena4=$pole[$i+5];
  14. $cena5=$pole[$i+6];
  15.  
  16. if ($cena1 == 0 OR $cena2 == 0 OR $cena3 == 0 OR $cena4 == 0 OR $cena5 == 0){
  17. $czy_publikowac='nie';
  18. }
  19. else{
  20. $czy_publikowac='tak';
  21. }
  22.  
  23. $zapyt = "select kolor from samochody_kolory where car_id='$car_id'";
  24. $wyn = mysql_query($zapyt);
  25. $liczba_pol = mysql_num_fields($wyn);
  26. while($pole_k = mysql_fetch_array($wyn))
  27. {
  28. for ($i=0;$i<$liczba_pol;$i=$i+1)
  29. {
  30. $kolor = $pole_k[$i];
  31. }
  32. }
  33.  
  34. if ($czy_publikowac=='tak'){
  35. echo'<td align="left" width="257" height="30" bgcolor="'.$kolor.'"><font face="Arial"><b>'.$car_nazwa.'</b></font></td>';
  36. }
  37.  
  38. for ($licznik_dzien=1;$licznik_dzien<32;$licznik_dzien=$licznik_dzien+1)
  39. {
  40. if(checkdate($miesiac, $licznik_dzien, $rok))
  41. {
  42. $kontrola=0;
  43.  
  44. //------------------
  45. $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'";
  46. $wynik001 = mysql_query($zapyt001);
  47.  
  48. $liczba_pol = mysql_num_fields($wynik001);
  49. $liczba_wierszy = mysql_num_rows($wynik001);
  50. while($pole = mysql_fetch_array($wynik001))
  51. {
  52. $kontrola=1;
  53. }
  54. //------------------
  55.  
  56. $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";
  57. $wynik001 = mysql_query($zapyt001);
  58.  
  59. $liczba_pol = mysql_num_fields($wynik001);
  60. $liczba_wierszy = mysql_num_rows($wynik001);
  61. if ($kontrola==1 AND $czy_publikowac=='tak'){
  62. echo '<td align="center" width="27" height="30" bgcolor="'.$kolor.'"><font face="Arial">';
  63. }
  64. if ($kontrola != 1 AND $czy_publikowac=='tak'){
  65. echo '<td align="center" width="27" height="30"><font face="Arial">&nbsp;';
  66. }
  67. while($pole = mysql_fetch_array($wynik001))
  68. {
  69. $rez_id_samochod = $pole[0];
  70. $rez_data_dzien = $pole[1];
  71. $rez_data_mies = $pole[2];
  72. $rez_data_rok = $pole[3];
  73.  
  74. $rez_godzina = $pole[4];
  75. $rez_minuta = $pole[5];
  76. $rez_zw_godzina = $pole[6];
  77. $rez_zw_minuta = $pole[7];
  78.  
  79. $rez_nazwisko = $pole[8];
  80. $rez_telefon = $pole[9];
  81. $rez_miejsce_wyn = $pole[10];
  82. $rez_miejsce_zwr = $pole[11];
  83. $rez_uwagi = $pole[12];
  84. $rez_numer = $pole[13];
  85. $kontrola=1;
  86.  
  87. if ($rez_godzina==0){
  88. $rez_godzina='00';
  89. }
  90. if ($rez_minuta==0){
  91. $rez_minuta='00';
  92. }
  93. if ($rez_zw_godzina==0){
  94. $rez_zw_godzina='00';
  95. }
  96. if ($rez_zw_minuta==0){
  97. $rez_zw_minuta='00';
  98. }
  99.  
  100. if ($czy_publikowac=='tak'){
  101.  
  102. if ($rez_godzina==-77 and $rez_zw_godzina==77){
  103. 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>';
  104. }
  105. if ($rez_godzina!=-77){
  106. 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>';
  107. }
  108. if ($rez_zw_godzina!=77){
  109. 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>';
  110. }
  111.  
  112. }
  113. }
  114. echo '</font></td>';
  115. }
  116. }
  117. echo '</tr>';
  118. }
  119. }
  120.  


Ten post edytował primo83 29.01.2015, 10:32:40
Go to the top of the page
+Quote Post
Pyton_000
post 29.01.2015, 17:30:55
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Nudziło mi się wink.gif 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.

  1. $zapytanie5 = "
  2. SELECT
  3. car_id, car_nazwa, car_cena1, car_cena2, car_cena3, car_cena4, car_cena5, kolor
  4. FROM
  5. samochody s
  6. LEFT JOIN samochody_kolory sk ON(sk.car_id = s.id)
  7. ORDER BY car_nazwa ASC";
  8. $wynik5 = mysql_query($zapytanie5);
  9. $liczba_pol5 = mysql_num_fields($wynik5);
  10.  
  11. while ($pole = mysql_fetch_array($wynik5)) //ok 15 powtórzeń
  12. {
  13. $car_id = $pole[0];
  14. $car_nazwa = $pole[1];
  15. $cena1 = $pole[2];
  16. $cena2 = $pole[3];
  17. $cena3 = $pole[4];
  18. $cena4 = $pole[5];
  19. $cena5 = $pole[6];
  20. $kolor = $pole[7];
  21.  
  22. $czy_publikowac = ($cena1 && $cena2 && $cena3 && $cena4 && $cena5) ? 'tak' : 'nie';
  23.  
  24.  
  25. if ($czy_publikowac == 'tak')
  26. {
  27. echo '<td align="left" width="257" height="30" bgcolor="' . $kolor . '"><font face="Arial"><b>' . $car_nazwa . '</b></font></td>';
  28. }
  29.  
  30. $zapyt001 = "
  31. SELECT *
  32. FROM tabela_rezerwacji
  33. WHERE
  34. rez_id_samochod='$car_id' AND
  35. rez_data_rok='$rok' AND
  36. rez_data_mies='$miesiac'
  37. -- AND rez_data_dzien='$licznik_dzien'
  38. ORDER BY rez_data_dzien ASC rez_godzina ASC";
  39. $wynik001 = mysql_query($zapyt001);
  40.  
  41. $rezerwacje = array();
  42. while($rezerwacja = mysql_fetch_array($wynik001))
  43. {
  44. $rezerwacje[$rezerwacja['rez_data_dzien']] = $rezerwacja;
  45. }
  46.  
  47. for ($licznik_dzien = 1; $licznik_dzien < 32; $licznik_dzien = $licznik_dzien + 1)
  48. {
  49. if (checkdate($miesiac, $licznik_dzien, $rok))
  50. {
  51. if($czy_publikowac == 'tak' && !array_key_exists($licznik_dzien, $rezerwacje))
  52. {
  53. echo '<td align="center" width="27" height="30"><font face="Arial">&nbsp;</font></td>';
  54. continue;
  55. }
  56. elseif ($czy_publikowac == 'tak')
  57. {
  58. echo '<td align="center" width="27" height="30" bgcolor="' . $kolor . '"><font face="Arial">';
  59. }
  60.  
  61. foreach($rezerwacje[$licznik_dzien] as $pole)
  62. {
  63. $rez_id_samochod = $pole[0];
  64. $rez_data_dzien = $pole[1];
  65. $rez_data_mies = $pole[2];
  66. $rez_data_rok = $pole[3];
  67.  
  68. $rez_godzina = $pole[4];
  69. $rez_minuta = $pole[5];
  70. $rez_zw_godzina = $pole[6];
  71. $rez_zw_minuta = $pole[7];
  72.  
  73. $rez_nazwisko = $pole[8];
  74. $rez_telefon = $pole[9];
  75. $rez_miejsce_wyn = $pole[10];
  76. $rez_miejsce_zwr = $pole[11];
  77. $rez_uwagi = $pole[12];
  78. $rez_numer = $pole[13];
  79. $kontrola = 1;
  80.  
  81. if ($rez_godzina == 0)
  82. {
  83. $rez_godzina = '00';
  84. }
  85. if ($rez_minuta == 0)
  86. {
  87. $rez_minuta = '00';
  88. }
  89. if ($rez_zw_godzina == 0)
  90. {
  91. $rez_zw_godzina = '00';
  92. }
  93. if ($rez_zw_minuta == 0)
  94. {
  95. $rez_zw_minuta = '00';
  96. }
  97.  
  98. if ($czy_publikowac == 'tak')
  99. {
  100.  
  101. if ($rez_godzina == -77 and $rez_zw_godzina == 77)
  102. {
  103. 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>';
  104. }
  105. if ($rez_godzina != -77)
  106. {
  107. 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>';
  108. }
  109. if ($rez_zw_godzina != 77)
  110. {
  111. 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>';
  112. }
  113.  
  114. }
  115. }
  116.  
  117. echo '</font></td>';
  118. }
  119. }
  120. echo '</tr>';
  121. }
Go to the top of the page
+Quote Post
primo83
post 9.02.2015, 17:33:06
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 29.01.2015

Ostrzeżenie: (0%)
-----


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ć smile.gif) z 7-11 sekund do 0.025-0,035 sekundy!

Wklejam działający kod i pozdrawiam:

  1. $zapyt001 = "SELECT * FROM tabela_rezerwacji WHERE rez_data_rok='$rok' AND rez_data_mies='$miesiac' ORDER BY rez_godzina ASC";
  2. $wynik001 = mysql_query($zapyt001);
  3. $dane = Array();
  4. $z = 0;
  5. $h = 0;
  6. while ($r = mysql_fetch_array($wynik001)){
  7.  
  8. $dane[] = $r;
  9.  
  10. $z = $z + 1;
  11.  
  12. }
  13.  
  14. $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";
  15.  
  16. $wynik5 = mysql_query($zapytanie5);
  17. $liczba_pol5 = mysql_num_fields($wynik5);
  18. while($pole = mysql_fetch_array($wynik5))
  19. {
  20. for ($i=0;$i<$liczba_pol5;$i=$i+8)
  21. {
  22. $car_id = $pole[$i];
  23. $car_nazwa = $pole[$i+1];
  24. $cena1=$pole[$i+2];
  25. $cena2=$pole[$i+3];
  26. $cena3=$pole[$i+4];
  27. $cena4=$pole[$i+5];
  28. $cena5=$pole[$i+6];
  29. $kolor=$pole[$i+7];
  30.  
  31. if ($cena1 == 0 OR $cena2 == 0 OR $cena3 == 0 OR $cena4 == 0 OR $cena5 == 0){
  32. $czy_publikowac='nie';
  33. }
  34. else{
  35. $czy_publikowac='tak';
  36. }
  37.  
  38.  
  39.  
  40. if ($czy_publikowac=='tak'){
  41. echo'<td align="left" width="257" height="35" bgcolor="'.$kolor.'"><font face="Arial"><b>'.$car_nazwa.'</b></font></td>';
  42. }
  43.  
  44. for ($licznik_dzien=1;$licznik_dzien<32;$licznik_dzien=$licznik_dzien+1)
  45. {
  46. if(checkdate($miesiac, $licznik_dzien, $rok))
  47. {
  48.  
  49. $kontrola=0;
  50.  
  51. for($i = 0; $i<$z; $i++) {
  52. if($dane[$i]['rez_id_samochod'] == $car_id && $dane[$i]['rez_data_dzien'] == $licznik_dzien){
  53. $kontrola = 1;
  54. $h = $i;
  55. break;
  56. }
  57. }
  58.  
  59. if ($kontrola==1 AND $czy_publikowac=='tak'){
  60. if($licznik_dzien==$dzien){
  61. echo '<td align="center" width="27" height="35" bgcolor="'.$kolor.'" style="border-left: 3px solid #000000; border-right: 3px solid #000000"><font face="Arial">';
  62. }
  63. else {
  64. echo '<td align="center" width="27" height="35" bgcolor="'.$kolor.'"><font face="Arial">';
  65. }
  66. }
  67. if ($kontrola != 1 AND $czy_publikowac=='tak'){
  68. if($licznik_dzien==$dzien){
  69. echo '<td align="center" width="27" height="35" style="border-left: 3px solid #000000; border-right: 3px solid #000000"><font face="Arial">&nbsp;';
  70. }
  71. else {
  72. echo '<td align="center" width="27" height="35"><font face="Arial">&nbsp;';
  73. }
  74. }
  75.  
  76. for($h = $h; $h<$z; $h++) {
  77. if($dane[$h]['rez_id_samochod'] == $car_id && $dane[$h]['rez_data_dzien'] == $licznik_dzien){
  78. $rez_id_samochod = $dane[$h]['rez_id_samochod'];
  79. $rez_data_dzien = $dane[$h]['rez_data_dzien'];
  80. $rez_data_mies = $dane[$h]['rez_data_mies'];
  81. $rez_data_rok = $dane[$h]['rez_data_rok'];
  82.  
  83. $rez_godzina = $dane[$h]['rez_godzina'];
  84. $rez_minuta = $dane[$h]['rez_minuta'];
  85. $rez_zw_godzina = $dane[$h]['rez_zw_godzina'];
  86. $rez_zw_minuta = $dane[$h]['rez_zw_minuta'];
  87.  
  88. $rez_nazwisko = $dane[$h]['rez_nazwisko'];
  89. $rez_telefon = $dane[$h]['rez_telefon'];
  90. $rez_miejsce_wyn = $dane[$h]['rez_miejsce_wyn'];
  91. $rez_miejsce_zwr = $dane[$h]['rez_miejsce_zwr'];
  92. $rez_uwagi = $dane[$h]['rez_uwagi'];
  93. $rez_numer = $dane[$h]['rez_numer'];
  94.  
  95.  
  96. if ($rez_godzina==0){
  97. $rez_godzina='00';
  98. }
  99. if ($rez_minuta==0){
  100. $rez_minuta='00';
  101. }
  102. if ($rez_zw_godzina==0){
  103. $rez_zw_godzina='00';
  104. }
  105. if ($rez_zw_minuta==0){
  106. $rez_zw_minuta='00';
  107. }
  108.  
  109. if ($czy_publikowac=='tak'){
  110.  
  111. if ($rez_godzina==-77 and $rez_zw_godzina==77){
  112. 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>';
  113. }
  114. if ($rez_godzina!=-77){
  115. 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>';
  116. }
  117. if ($rez_zw_godzina!=77){
  118. 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>';
  119. }
  120.  
  121. }
  122.  
  123. }
  124. }
  125. echo '</font></td>';
  126. }
  127. }
  128. echo '</tr>';
  129. }
  130.  
  131. }


Ten post edytował primo83 9.02.2015, 17:35:03
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 23:55