Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]jak napisac zapytanie łaczące trzy tabele
modic
post
Post #1





Grupa: Zarejestrowani
Postów: 64
Pomógł: 0
Dołączył: 18.07.2008

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


mam baze danych o takiej strukturze:

  1. TABLE `oceny` (
  2. `id_oceny` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_przedmiot` int(11) NOT NULL DEFAULT '0',
  4. `id_uczen` int(11) NOT NULL DEFAULT '0',
  5. `ocena` int(11) NOT NULL DEFAULT '0',
  6.  
  7. TABLE `przedmioty` (
  8. `id_przedmiotu` int(11) NOT NULL AUTO_INCREMENT,
  9. `przedmiot` varchar(25) DEFAULT NULL,
  10.  
  11. TABLE `uczniowie` (
  12. `id_ucznia` int(11) NOT NULL AUTO_INCREMENT,
  13. `imie` varchar(255) NOT NULL DEFAULT '',
  14. `nazwisko` varchar(255) NOT NULL DEFAULT '',
  15. `uczen_idrodzica` int(11) DEFAULT NULL,
  16. `uczen_idklasy` int(11) NOT NULL DEFAULT '0',



na napisałem coś takiego:

  1. <?php
  2. // funkcja wyswietlanaca oceny
  3. function ocena ($id_ucznia, $przedmiot) {
  4. // zxapytanie o oceny z przedmiotu
  5.  
  6. $zapytanie_oceny = mysql_query("SELECT ocena FROM oceny WHERE id_przedmiot='$przedmiot' AND id_uczen='$id_ucznia'");
  7. if (!$zapytanie_oceny) {
  8. exit  ('<br><p>Problem podczas pobierania ocen ucznia z bazy danych !!!<br/>'.
  9.   'Error: '.mysql_error().'</p>');
  10. }
  11.  
  12. echo " - ";
  13.  
  14. if(!mysql_num_rows($zapytanie_oceny)){
  15. $napis = "brak ocen";
  16. }
  17.  
  18. echo $napis;
  19.  
  20. while ($wynik = mysql_fetch_array($zapytanie_oceny)) {
  21. $ocena = $wynik['ocena'];
  22.  
  23. echo "<span class='error'>";
  24. echo  "$ocena ";
  25.  
  26. echo "</span>";
  27.      
  28. }
  29. echo "</p>";
  30. }
  31.  
  32.  
  33. // zapytanie o przedmioty i wyświetleenia listy ocen
  34. if(!empty($_POST['przedmiot_id'])){
  35.  
  36. $liczba = 1;
  37.  
  38. $zapytanie = mysql_query("
  39. SELECT
  40.  id_ucznia,
  41.  imie,
  42.  nazwisko,
  43.  uczen_idrodzica
  44. FROM
  45.  uczniowie
  46. where
  47.  uczen_idklasy=$id_class
  48. order by
  49.  uczniowie.nazwisko");
  50. if (!$zapytanie) {
  51. exit  ('<br><p>Problem podczas pobierania danych uczniów z bazy danych !!!<br/>'.
  52.   'Error: '.mysql_error().'</p>');
  53. }
  54. echo "<br>";
  55.  
  56. if(!mysql_num_rows($zapytanie)){
  57. echo "<div align='center'><span class='error'>brak wyników do wyswietlenia</span></div>";
  58. }
  59.  
  60. while ($wynik = mysql_fetch_array($zapytanie)) {
  61. $id = $wynik['id_ucznia'];
  62. $imie = htmlspecialchars($wynik['imie']);
  63. $nazwisko = htmlspecialchars($wynik['nazwisko']);
  64. $id_rodzic = $wynik['uczen_idrodzica'];
  65.  
  66. echo  "<p>$liczba. <b>$nazwisko $imie</b>";
  67. $liczba ++;
  68.  
  69.  ocena ($id, $_POST['przedmiot_id']);
  70.  
  71. echo "</li>";
  72. }
  73. }
  74. ?>



w tym moim kodzie jest funkcje OCENA (mająca własne zapytanie do bazy), która jest wywoływana tyle razy ilu jest uczniów w klasie, i sluży do wyświetlenia ocen uczna z danego przedmiotu

A moje pytanie brzmi, czy nie da się jakoś napisać tego w taki sposób, aby wszystko zmieścić w jednej funkcji i napisać tylko jedno zapytanie do bazy danych, tak by wyświetliła taki wynik:

OCENY Z MATEMATYKI:
Nazwisko1 Imię1 - 1, 5, 3, 4
Nazwisko2 Imię2 - 5, 1, 4, 4

z góry dziękuje za wszelką pomoc
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: 11.10.2025 - 03:59