![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 17.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam przygotowaną tablkę o wartościach np. ID| Ocena 1 | 2,5,8,2,3 2 | 4,5,3,2,1,5 3 | 1,1,10,8,4 ... Potrzebuje zrobić TOP5, gdzie TOP1 to ID z najwyższą średnią oceną. Dla każdego pojedyńczego ID wyliczenie średniej to nie problem bo wystarczy skorzystać z explode(), ale nie wiem jak powinno wyglądać zapytanie, które sortowało by wyniki od najwyższej do najniższej średniej. |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Wyrzuć bazę do kosza i zaprojektuj ją od nowa.
Przecież to co masz to głupota. W bazie w jednym polu jest jedna wartość. I kropka. A nie wiele wartości w stylu 2,5,8,2,3 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Tak naprawdę w takim stanie, w jakim masz zaprojektowaną tabelę musisz policzyć średnie wszystkich wierszy, zapisać to np w jakiejś tablicy, posortować tablicę i wybrać pięć wartości od góry albo od dołu (w zależności czy sortowanie malejące czy rosnące).
Czyli totalnie bez sensu ^^ Ten post edytował Shili 18.06.2008, 15:39:29 |
|
|
![]()
Post
#4
|
|
![]() Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków ![]() |
3 tabelki:
uczen ocena ocenauczen w 1: id imie nazwisko w 2: id ocena w 3: id_ucznia id_oceny i możesz przypisać kilka ocen jednemu uczniowi. później wybierasz wszystkie oceny jednego ucznia i liczysz -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
@piotrooo89:
Twój pomysł również nie należy do najlepszych ![]() Mój typ! uczniowie: id, imie, nazwisko przedmioty: id, nazwa (hehe nikt nigdzie nie wspomniał o przedmiotach *) oceny: uczen_id, przedmiot_id, ocena, data (żeby można śledzić postępy w nauce) Tyle. Wg mnie to załatwia wszystkie problemy. Poza tym spełniona jest 3 postać normalna, a o to chodzi. * łoj, zasugerowałem się postem powyżej. Nigdzie nie ma mowy tym, że to oceny szkolne (tym bardziej patrząc na przykładowe dane jest to raczej nierealne ![]() jakas_tabelka: id, imie, nazwisko oceny_lub_punkty: jakas_tabelka_id, ocena_lub_punkt Ten post edytował phpion 18.06.2008, 17:56:59 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
@Phpion - nie ma możliwości założenia tutaj klucza. Trzeba by było dodać jeszcze identyfikator dla oceny_lub_punkty
![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Zgadzam się. To tylko zarys. Najprościej wprowadzić id, ale może autor tematu chciałby skorzystać z klucza głównego obejmującego więcej niż 1 kolumnę (np. jakas_tabelka_id + data). Aczkolwiek id to zdecydowanie najprostsze (i możliwe, że najlepsze) rozwiązanie.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Z datą myślę, że niekoniecznie - w końcu jeśli to oceny to można dostać z jednego przedmiotu kilka jednego dnia. A zakładanie klucza na więcej niż trzy pola mija się moim zdaniem z celem - dlatego zaproponowałam ze swojej strony id.
Ale jak zarys, to ok ^^ |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 17.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
To co przedstawiłem to był tylko mały fragment mojej tabeli. W rzeczywistości jest ona trochę większa ale tylko z tym fragementem mam problem. W skrypcie chodzi o ocenianie filmików. Zależało mi jeszcze na tym aby baza zapamiętywała jaką ocene wystawił użytkownik.
Miałem dwa wiersze zwiazane z ocenianiem ID| Ocena | Ocena_user_id 1 | 2,3,4,5|212,150,100,320 ... Dzięki temu mogłem z wykorzystaniem explode sprawdzić czy lub jaką ocene dał użytkownik w filmiku o ID, w tym przypadku 1 Ale teraz widze, że w ogole nie przemyślalem sprawy. Wszystko działa ale można to było zrobić o wiele lepiej np. Tabela Oceny: ID Ocena User_id Video_id Już nie wspomnę o tym jak sobie poradziłem z komentarzami. Mam jakąs podswiadoma obawe ze im wiecej tabel i wierszy tym gorzej ![]() Dziękuje za pomoc. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Oczywiście, jeśli tabele są robione w nieprzemyślany sposób i do zrealizowania każdej relacji, nawet jeden do jeden są osobne tabele to nie jest dobrze. Jednak dużo wolniejsze jest, kiedy musisz sam wyłuskiwać te rekordy - baza danych została tak napisana i zoptymalizowana, że pobieranie i explode są wolniejsze i mniej wydajne. W innym przypadku zapewne programiści struktur baz danych zaczęliby iść w takim dokładnie kierunku
![]() |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Top 5 z najwyższą średnią ![]() -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Antydebilne zapytanie. @EDIT w sumie te zapytanie nie powinno działać ponieważ on ma w jednej komórce wiele danych. Ten post edytował cojack 19.06.2008, 12:08:37 -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 17.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Troche sie pomęczyłem i przeksztalcilem baze danych i skrypt. Mam juz teraz w kazdym polu po jedna wartosc, wiec zapytanie bedzie pewnie dzialac
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 06:38 |