Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][SQL]Dzienniczek ucznia, czy nie dało by się lepiej?
cycofiasz
post
Post #1





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


Witam, zrobiłem sobie skrypt dzienniczka ucznia. Zasady działania nie muszę za pewne tłumaczyć (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

Mam 2 tabele w mysql:
(IMG:http://i43.tinypic.com/2rh4591.png)

(IMG:http://i44.tinypic.com/1g11tg.png)

Skliciłem taki oto skrypt:
  1. <?php
  2. echo '<table style="border-collapse: collapse;" border="1">'."\n";
  3. echo ' <caption style="caption-side: top;padding: 2px;"><b>Oceny ucznia nr. 20</b></caption>'."\n";
  4. echo ' <tr align="center"><td width="30"><strong>Lp.</strong></td><td width="200"><strong>PRZEDMIOT</strong></td><td width="200"><strong>OCENY</strong></td>'."\n";
  5.  
  6. // pobieramy listę przedmiotów
  7. $sql_przdmioty = mysql_query ("SELECT `przedm_id`,    `przedm_nazwa` FROM `dzienniczek_przedmioty`");
  8.  
  9. while ($row = mysql_fetch_array($sql_przdmioty))
  10. {    
  11.    $oceny=''; $o=''; //resetowanie zmiennych
  12.    $sql_oceny = mysql_query ("SELECT `ocena_stopien` ,`ocena_waznosc` FROM `dzienniczek_oceny` WHERE `ocena_przedm_id` = '$row[przedm_id]'");
  13.    while ($row2 = mysql_fetch_array($sql_oceny))
  14.    {
  15.        if($row2[ocena_waznosc] == '1') $o = '<span style="color:red">'.$row2[ocena_stopien].'</span>'; // kolorowanie sprawdzienów
  16.        elseif($row2[ocena_waznosc] == '2') $o = '<span style="color:blue">'.$row2[ocena_stopien].'</span>'; //kolorowanie innych ocen
  17.        $oceny .= $o.', ';
  18.    }
  19.    
  20.    echo " <tr><td>$row[przedm_id]</td><td>$row[przedm_nazwa]</td><td>$oceny</td></tr>\n";
  21. }
  22.  
  23. echo '</table>'."\n";
  24. ?>


co dało taki rezultat (taki jak ma być)

(IMG:http://i42.tinypic.com/kevzew.png)


Jak zauważyliście skrypt ten pobiera najpierw listę przedmiotów i podczas każdego przebiegu pętli jest wykonywane zapytanie o oceny do tego przedmiotu... Nie wydaje się wam się też że to jest nieoptymalne? Jak pobrać to wszystko bez zawierania w pętlach zapytań do sql?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zegarek84
post
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


  1. SELECT dzienniczek_przedmioty.przedm_id, dzienniczek_przedmioty.przedm_nazwa, dzienniczek_oceny.ocena_stopien, dzienniczek_oceny.ocena_waznosc
  2. FROM dzienniczek_przedmioty LEFT JOIN dzienniczek_oceny ON dzienniczek_przedmioty.przedm_id=dzienniczek_oceny.ocena_przedm_id
  3. ORDER BY dzienniczek_przedmioty.przedm_id

jeszcze jedno zauważyłem że "dokładasz" do ocen - wyświetlając w pętli to zapytanie zrób sobie przed petlą jakąś zmienną i w pętli sprawdzaj czy jej wartość jest różna od id_przedmiotu - jesli różna wyświetlisz cały wiersz, jeśli taka sama to pomiń prawie cały rekord i dopisz ocenę - po tym na koniec pętli przypisz wartość tej zmiennej co porównujesz wartość id_przedmiotu....

mam na myśli taką sytuację zwróconą z bazy:

Kod
przedm_id     ||przedm_nazwa    || ocena_stopien    || ocena_waznosc
    1    ||    j.pol    ||    10/20    ||    1
    1    ||    j.pol    ||    3    ||    2
    2    ||    j.ang    ||    5    ||    2


lub w 2 zapytaniach prawie tak jak zrobiłeś tyle że pobież odrazu pełne tabele te co potrzebujesz i przyrównaj to w php gdyż odwołanie w pętli do bazy nie jest najlepszym pomysłem...

Ten post edytował zegarek84 17.01.2009, 06:21:52
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 4.10.2025 - 01:52