Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] projekt bazy dziennika
Agape
post 27.05.2010, 12:33:12
Post #1





Grupa: Zarejestrowani
Postów: 384
Pomógł: 13
Dołączył: 16.06.2006

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


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...


--------------------
Go to the top of the page
+Quote Post
sadistic_son
post 27.05.2010, 12:47:36
Post #2





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


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


Ten post edytował sadistic_son 27.05.2010, 13:14:16


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
Agape
post 31.05.2010, 07:38:53
Post #3





Grupa: Zarejestrowani
Postów: 384
Pomógł: 13
Dołączył: 16.06.2006

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


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.


--------------------
Go to the top of the page
+Quote Post
Fifi209
post 31.05.2010, 08:02:59
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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`)


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
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: 20.06.2025 - 12:40