![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 21.01.2014 Ostrzeżenie: (0%) ![]() ![]() |
Witam - pierwszy raz tutaj na forum, potrzebna jest mi pomoc, której na razie nie uzyskałem na uczelni, dlatego pytanie owo kieruję do Państwa.
Otóż moim zadaniem jest stworzenie projektu, którego rolą będzie przechowywanie i wyświetlanie ocen zaliczeniowych studentów. Sprawa jest na tyle skomplikowana, iż jest to uczelnia, a system docelowo ma działać na wszyskich jej wydziałach. Można się więc domyśleć jak wiele danych jest do przeanalizowania i przekazania w odpowiedni sposób. Na poniższym zdjęciu prezentuje aktualny schemat najważniejszych tabel z bazy danych: Schemat tabeli Moją tabelą jest tabela PASSES, która na tą chwilę wygląda jak wygląda. Być może mógł bym ją przebudować tak, aby zawierała w sobie o wielem niej danych, jednakże na razie wszystko uzależnione jest od tego, czy dane, które chcę wyświelić są w ogóle możliwe do wyświetlenia w sensowny sposób. Cały system opiera się oczywiście na języku PHP oraz - niestety - AJAXie, który za pomocą biblioteki JQUERY obsługuje wszystkie zapytania, komunikacje z bazą, etc. Aktualnie priorytetową sprawą dla mnie jest odpowiedź na pytanie: 1. Docelowo chciał bym, aby nauczyciel po zalogowaniu do systemu dostawał listę wszystkich studentów, z którymi prowadzi zajęcia. Czy jest to możliwe, na podstawie widocznych tabel? Nasz system działa na zasadzie tabeli, której każda kolumna może być sortowana na podstawie zawartej w niej rekordów (przykładowo jeżeli kolumna WYDZIAŁ ma rekordy WYDZIAL1, WYDZIAL2, WYDZIAL3, z listy rozwijanej nad tą kolumną mogę wybrać wyświetlanie danych tylko z wybranego wydziału) - dlatego też myślałem, żeby wyświetlać listę studentów i na jej podstawie prowadzący będzie wybierał interesujące go przedmioty do oceny. 2. Jeżeli powyższe jest możliwe - w jaki sposób, do owej listy wszystkich studentów z danego przedmiotu przyczepić tabelę PASSES (pass, pass_date, comments), jeżeli aktualnie owa tabela jest pusta? Próbowałem używać poleceń FULL JOIN, UNION, ale nie przynosiły one odpowiedniego efektu. 3. Jeżeli dwa powyższe są możliwe do wykonania, ostatnia sprawa to zapisanie wszystkich danych do tabeli PASSES. Może pokażę jak wygląda obsługa wyświetlania wybranych danych w systemie: Wyświetlanie Jak widać zaznaczyłem nazwę zajęć (w wyświetlaniu jest połączenie z tabel przedmioty, specjalizacja, kierunek i typ studiów), po kliknięciu w dropdowna wyświelta się lista dostępnych przedmiotów. Po kliknięciu OK odpowiednie ID jest wysyłane do tabeli CLASSES, z której pochodzi to zdjęcie. Po kliknięciu PORZUĆ dane nie są zapisywane. Pola mogą być również edytowane tekstowo, gdzie po kliknięciu w nazwę wyświetla się pole tekstowe, które można zedytować i zapisać wpisaną wartość do bazy w odpowiednim miejscu. Moim zdaniem tabela PASSES na pewno musi mieć jakieś zewnętrzne ID, być może wystarczyło by tylko odniesienie do tabeli CLASSES? I oczywiście to nie jest tak, że dane w tabeli są wprowazdzone na stałe i nikt ich nie edytuje. Niestety ten system doskonały nie jest i trzeba go co semestr czy co roku aktualizować aby posiadał aktualne dane. Ja już wykonałem moduł dodawania ocen w formularzu, gdzie wybiera się te wszystkie dane - ale patrząć ze strony wykładowcy, który na pierwszym roku ma dodać oceny 150 studentom przez formularz każdemu z osobna - nie jest to ani wygodne, ani przyjemne rozwiązanie. Chyba że dało by się zrobić formularz, który dodaje wybrane wpisy wszystkim pasującym studentom? Bo już w tym momencie mam taki formularz, rzeczywiście wyświetla mi wszystkich studentów dla wybranych danych w liście rozwijanej. Proszę o rady :) Ten post edytował x X x 21.01.2014, 21:28:37 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 21.01.2014 Ostrzeżenie: (0%) ![]() ![]() |
W tym problem, że nie mogę sobie z tym poleceniem poradzić ;) Na razie robiłem to na podstawie zapytania SQL, używając komendy UNION, bo FULL JOIN u mnie nie chce działać - z tego co czytałem aby przez UNION połączyć tabele obie muszą mieć tyle samo rekordów.
Miałem taką sytuację, w której w tabeli passes był jeden rekord. Po połączeniu przez union z listą wszystkich studentów pozostałe pola (takie jak przedmiot, wydział, ocena, etc) miały wartości NULL. A chcę, aby takie zapytanie zwróciło mi takie wyniki: STUDENT || WYDZIAŁ || PRZEDMIOT || PROWADZĄCY || OCENA || DATA || KOMENTARZ ----------------------------------------------------------------------------------------------------- student1 || wydział1 || przedmiot1 || prowadzący1 || || || student2 || wydział1 || przedmiot1 || prowadzący1 || || || student3 || wydział1 || przedmiot1 || prowadzący1 || || || student56 || wydział1 || przedmiot1 || prowadzący1 || 5 || 15.12.13 || ocena zal. itd. Powiedzmy, że jest to widok dla jednego prowadzącego. STUDENT, WYDZIAŁ, PRZEDMIOT, PROWADZĄCY - z 4 różnych tabel, OCENA, DATA, KOMENTARZ z mojej. Jeżeli coś trzeba wyjaśnić odnośnie struktury - proszę napisz. EDIT: zrobiłem takie prowizoryczne zapytanie:
I teraz powiedzcie mi czy w SQL mogę to złączyć tak, aby z prawej strony dołączyły do tych danych (rekordów jest ponad 400) kolumny passes, pass_date i comments z mojej tabeli PASSES? Jeżeli nie, czy będzie można coś takiego wykonać przy pomocy tej tabeli, której zdjęcie zamieściłem wcześniej? Oraz czy to zapytanie nadaje się do wykorzystania w takiej formie, czy może trzeba zrobić to inaczej (inne joiny, może podzapytania)? EDYCJA2:
Powyższe polecenie dokleja kolumnę passes do wyświetlonych wcześniej danych. Jeżeli w tabeli nie ma studenta, który z owego przedmiotu na danym kierunku/roku/specjalizacji, u danego nauczyciela ma wpisaną ocenę - w kolumnie wyświetlają się wartości NULL. Natomiast, jeżeli jest przynajmniej jedna osoba spełniająca powyższe warunki, wtedy rzeczywiście ocena się wyświetla, ale przy każdym rekordzie z zapytania. RIGHT JOIN tutaj nie działa, tak samo polecenia OUTER, czy FULL. Hmm nikt nie pomoże? Chyba nie dałem zadania niemożliwego do rozwiązania? :D UPDATE 23.02.2014: Jak już pisałem wcześniej w temacie, który niestety został zamknięty rezygnuję z takiego sposóbu wykonania aplikacji. Jak dla mnie jest to niewykonalne aktualnie - i nie wiem, czy w ogóle da się to tak zrobić. Za dużo problemów, między innymi z dodawaniem tych wszystkich danych, później ich wyświetlaniem. Po co. Dlatego wydaje mi się, że owy problem pozostawiam nie rozwiązany i przechodzę do innego koncepcji. MIANOWICIE chcę wykonać formularz, który po przyciśnięciu przycisku zapisz doda wielokrotnie wybrane i zedytowane dane do tabeli oceny, zmieniając tylko identyfikator studenta, aby jednym zapytaniem dodać wiele rekordów wszystkim pasującym studentom. Może pokażę, jak teraz wygląda mój formularz: https://www.dropbox.com/s/z80xqwit1m32ngp/Z...%2014.31.56.png Po wybraniu odpowiednich danych zmienia się lista dostępnych studentów. Nie działa to jeszcze do końca właściwie, ale z tym myślę sobie poradzić. Aktualnie owy formularz dodaje do mojej tabeli oceny wszystkie wybrane i wpisane dane. Chcę, tak jak na wstępie, aby za jego pomocą wybrane dane zostały zapisywane dla wszystkich dostępnych i pasujących studentów (czyli zmienia się tylko identyfikator studenta). Czy można coś takiego wykonać? Dodam, że funkcja odpowiedzialna za dodawanie danych jest napisana w javie. Jeżeli zajdzie potrzeba mogę ją tutaj udostępnić. Bardzo proszę o pomoc. To pilna sprawa... UPDATE 26.02.2014 Naprawdę myślałem, że gdy napiszę na największym w Polsce forum poświęconym tematyce PHP to znajdzie się wielu, którzy bedą w stanie mi pomóc, może nie w całości od razu, ale przynajmniej w jakichś częściach. I teraz nie wiem czy nikomu się po prostu nie chcę poruszyć tematu, czy temat jest na tyle trudny, że nie da się z tym nic zrobić? Czasu mam mało, a skoro nie potrafią doradzić mi profesjonaliści (których na pewno tutaj znajdę) to wątpie, abym sam na poziomie akademickim sobie z nim poradził. Bardzo dziwna sprawa, zważywszy na to, że już ponad 1000 wyświetleń tego tematu... Jeżeli coś jest niejasne proszę napisać, śmiało wyjaśnię owe kwestie. BTW wpadł mi do głowy wczoraj pomysł na sposób wybierania studentów, którym należy dodać ocenę. Tylko również nie wiem, czy będzie to wykonalne + czy będzie skuteczne. Aktualnie pasujący studenci wyświetlają się na liście rozwijanej. Ja pomyślałem o wyświetlaniu ich na dynamicznej checkliście, po czym formularz dodaje wielokrotne dane dla wybranych w tej liście studentów. Co o tym myślicie? Jednakowoż nadal moim priorytetowym sposobem rozwiązania problemu jest dodawanie ocen wszystkim pasującym studentom, tak, jak to opisałem wcześniej. Ten post edytował x X x 26.02.2014, 11:13:10 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.10.2025 - 14:39 |