Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] projekt bazy dziennika
Forum PHP.pl > Forum > Przedszkole
Agape
Witam, pisze wlasnie dziennik internetowy ale mam problem z tabela `oceny`. Jak ją skonsrułować.
Pierwszy pomysł był żeby były tam wszystkie oceny wszystkich uczniów z wszystkich przedmiotów. Ale jak bym pobierał dane SELECT'em to dla każdego przedmiotu musiałbym pobrać od nowa oceny - za duzo zapytan. Rozrozniłem oceny na rozne czesci, klasowki, kartkowki aktywnosc poniewaz sa rozne wspolczynniki. Wolal bym to zrobic w np tablicy wielowymiarowej -
Kod
$oceny['matematyka']['klasowka'] => 1, 3, 5, 1

Korzystam z najprostrzych zapytań które zawsze wystarczały np.
  1. SELECT * FROM `oceny` WHERE `id_ucznia`="1"

więc może da się jednak w jednej tabeli to zamieścic ale użyć czegoś więcej niż select (?), albo poprostu inaczej skonstrułować baze danych tylko jak...
sadistic_son
Ja bym to zrobił tak:

Tabele:

Uczen, Przedmiot, Uczen_Przedmiot, Oceny, Uczen_Przedmiot_Oceny.

Uczen i Przedmiot lacza sie w Uczen_Przedmiot a ta laczy sie z Oceny w Uczen_Przedmiot_Oceny.

Stawiajac ocene uczniowi wybierasz nazwisko w jednym selekcie, potem przedmiot w drugim a nastepnie ocene w trzecim. Wartosc z 1 i 2 selecta zapisujesz w Uczen_Przedmiot, nastepnie pobierasz id ostatniego rekordu i to id zapisujesz razem z wartoscia 3 selecta w tabeli Uczen_Przedmiot_Oceny. To dziala przy zalozeniu ze oceny sa w formacie dost, db, bdb itp. Dla ocen cyfrowych mozna pominac tabele Oceny.

Jesli chcesz wyswietlic oceny np Kowalskiego z Matematyki uzywasz takiego zapytania.
  1. SELECT Uczen.Nazwisko, Oceny.Ocena FROM Uczen, Przedmiot, Uczen_Przedmiot, Oceny, Uczen_Przedmiot_Oceny WHERE Uczen.Nazwisko = 'Kowalski' AND Przedmiot.Nazwa = 'Matematyka' AND Uczen_Przedmiot_Oceny.from_Oceny = Oceny.ID AND Uczen_Przedmiot_Oceny.from_Uczen_Przedmiot = Uczen_Przedmiot.ID AND Uczen_Przedmiot.from_Uczen = Uczen.ID AND Uczen_Przedmiot.from_Przedmiot = Przedmiot.ID
Agape
A nie da się tego zrobić "estetyczniej" ? Nadal pobierałbym tu jeden przedmiot a mi chodzi, żeby zredukować liczbę zapytań z parunastu (każdy przedmiot) do jednego zbiorowego zapytania o wszystkie przedmioty żebym mógł je wyświetlić w tabelce z ocenami.
Fifi209
Wszystko się da ;]
Zrobiłem dla Ciebie

Baza:
  1. -- phpMyAdmin SQL Dump
  2. -- version 2.11.4
  3. -- <a href="http://www.phpmyadmin.net" target="_blank">http://www.phpmyadmin.net</a>
  4. --
  5. -- Host: localhost
  6. -- Czas wygenerowania: 31 Maj 2010, 09:02
  7. -- Wersja serwera: 5.0.45
  8. -- Wersja PHP: 5.2.5
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11.  
  12. --
  13. -- Baza danych: `test`
  14. --
  15.  
  16. -- --------------------------------------------------------
  17.  
  18. --
  19. -- Struktura tabeli dla `oceny`
  20. --
  21.  
  22. CREATE TABLE `oceny` (
  23. `id` int(11) NOT NULL AUTO_INCREMENT,
  24. `uczen_id` int(11) NOT NULL,
  25. `przedmiot_id` int(11) NOT NULL,
  26. `ocena_id` int(11) NOT NULL,
  27. `waga` float NOT NULL,
  28. PRIMARY KEY (`id`),
  29. KEY `uczen_id` (`uczen_id`),
  30. KEY `przedmiot_id` (`przedmiot_id`),
  31. KEY `ocena_id` (`ocena_id`)
  32. ) ENGINE=InnoDB DEFAULT CHARSET=latin2 AUTO_INCREMENT=5 ;
  33.  
  34. --
  35. -- Zrzut danych tabeli `oceny`
  36. --
  37.  
  38. INSERT INTO `oceny` (`id`, `uczen_id`, `przedmiot_id`, `ocena_id`, `waga`) VALUES
  39. (1, 1, 2, 3, 0.7),
  40. (2, 4, 1, 6, 0.2),
  41. (3, 8, 2, 1, 0.5),
  42. (4, 3, 2, 4, 0.2);
  43.  
  44. -- --------------------------------------------------------
  45.  
  46. --
  47. -- Struktura tabeli dla `oceny_nazwy`
  48. --
  49.  
  50. CREATE TABLE `oceny_nazwy` (
  51. `id` int(11) NOT NULL AUTO_INCREMENT,
  52. `ocena` varchar(5) NOT NULL,
  53. PRIMARY KEY (`id`)
  54. ) ENGINE=InnoDB DEFAULT CHARSET=latin2 AUTO_INCREMENT=7 ;
  55.  
  56. --
  57. -- Zrzut danych tabeli `oceny_nazwy`
  58. --
  59.  
  60. INSERT INTO `oceny_nazwy` (`id`, `ocena`) VALUES
  61. (1, 'ndst'),
  62. (2, 'dop'),
  63. (3, 'dst'),
  64. (4, 'db'),
  65. (5, 'bdb'),
  66. (6, 'cel');
  67.  
  68. -- --------------------------------------------------------
  69.  
  70. --
  71. -- Struktura tabeli dla `przedmioty`
  72. --
  73.  
  74. CREATE TABLE `przedmioty` (
  75. `id` int(11) NOT NULL AUTO_INCREMENT,
  76. `nazwa` varchar(20) NOT NULL,
  77. PRIMARY KEY (`id`)
  78. ) ENGINE=InnoDB DEFAULT CHARSET=latin2 AUTO_INCREMENT=6 ;
  79.  
  80. --
  81. -- Zrzut danych tabeli `przedmioty`
  82. --
  83.  
  84. INSERT INTO `przedmioty` (`id`, `nazwa`) VALUES
  85. (1, 'polski'),
  86. (2, 'historia'),
  87. (3, 'matematyka'),
  88. (4, 'biologia'),
  89. (5, 'wf');
  90.  
  91. -- --------------------------------------------------------
  92.  
  93. --
  94. -- Struktura tabeli dla `uczniowie`
  95. --
  96.  
  97. CREATE TABLE `uczniowie` (
  98. `id` int(11) NOT NULL AUTO_INCREMENT,
  99. `imie` varchar(40) NOT NULL,
  100. `nazwisko` varchar(40) NOT NULL,
  101. PRIMARY KEY (`id`)
  102. ) ENGINE=InnoDB DEFAULT CHARSET=latin2 AUTO_INCREMENT=9 ;
  103.  
  104. --
  105. -- Zrzut danych tabeli `uczniowie`
  106. --
  107.  
  108. INSERT INTO `uczniowie` (`id`, `imie`, `nazwisko`) VALUES
  109. (1, 'Jan', 'Kowalski'),
  110. (2, 'Joanna', 'Nowak'),
  111. (3, 'Andrzej', 'Wiertara'),
  112. (4, 'Oktawia', 'Wysoka'),
  113. (5, 'Zygmunt', 'Krzak'),
  114. (6, 'Agnieszka', 'Barszcz'),
  115. (7, 'Mateusz', 'Franek'),
  116. (8, 'Katarzyna', 'Pola');
  117.  
  118. --
  119. -- Ograniczenia dla zrzutów tabel
  120. --
  121.  
  122. --
  123. -- Ograniczenia dla tabeli `oceny`
  124. --
  125. ALTER TABLE `oceny`
  126. ADD CONSTRAINT `oceny_ibfk_8` FOREIGN KEY (`ocena_id`) REFERENCES `oceny_nazwy` (`id`),
  127. ADD CONSTRAINT `oceny_ibfk_6` FOREIGN KEY (`uczen_id`) REFERENCES `uczniowie` (`id`),
  128. ADD CONSTRAINT `oceny_ibfk_7` FOREIGN KEY (`przedmiot_id`) REFERENCES `przedmioty` (`id`);
  129.  


Zapytanie:
  1. SELECT `oceny`.`id`, `imie`, `nazwisko`, `przedmioty`.`nazwa` AS `przedmiot`, `oceny_nazwy`.`ocena` FROM `oceny`
  2. LEFT JOIN `uczniowie` ON(`uczen_id` = `uczniowie`.`id`)
  3. LEFT JOIN `przedmioty` ON(`przedmiot_id` = `przedmioty`.`id`)
  4. LEFT JOIN `oceny_nazwy` ON(`ocena_id` = `oceny_nazwy`.`id`)
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.