MySql - zapytanie

Odpowiedz Nowy wątek
2014-12-11 13:49
0

Jako ,że zapytaniami w MySQL bawiłem się strasznie dawno temu (jeszcze w szkole) to jestem powiedzmy troszkę zakurzony w temacie.
Dlatego zwracam się do was ,żebyście chociaż naprowadzili ponieważ sam walcze i walcze i nie wygląda ,żebym posuwał się do przodu.

Mam tabele uczniowie:
id_ucznia
Imie
Nazwisko

I tabele przedmioty:
Nazwa_Przedmiotu
id_ucznia
Ocena

I teraz pytanie: Czy jest możliwość napisania zapytania które pozwalało by stworzyć tabelę (normalną tabelke a nie mysql-owa) tego typu
Imie , Nazwisko , Przedmiot1, Przedmiot2, Przedmiot3
Jan , kowalski , 5, 5 , 1

Pozostało 580 znaków

2014-12-11 13:55
1

Jest możliwość.

Pozostało 580 znaków

2014-12-11 14:06
0

potwierdzam jest tylko co to jest (normalną tabelke a nie mysql-owa?


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
Pewnie, żeby to wypluć do jakiegoś csv. - fourfour 2014-12-11 14:16

Pozostało 580 znaków

2014-12-11 14:30
0

Rozwiązanie na Oraclu:

CREATE TABLE TABELA AS
SELECT U.imie,
       U.nazwisko,
       (SELECT P.ocena
          FROM przedmioty P
         WHERE     P.nazwa_przedmiotu = 'PRZEDMIOT1'
               AND P.ID_UCZNIA = U.ID_UCZNIA)
          AS PRZEDMIOT1,
       (SELECT P.ocena
          FROM przedmioty P
         WHERE     P.nazwa_przedmiotu = 'PRZEDMIOT2'
               AND P.ID_UCZNIA = U.ID_UCZNIA)
          AS PRZEDMIOT2,(select P.ocena from przedmioty P where P.nazwa_przedmiotu='PRZEDMIOT3' AND P.ID_UCZNIA=U.ID_UCZNIA )AS PRZEDMIOT3
from uczniowie U
edytowany 2x, ostatnio: plug, 2014-12-11 14:33

Pozostało 580 znaków

2014-12-11 14:54
0

Czyli rozumiem ,że w zależności od ilości przedmiotów zapytanie będzie się rozszerzać.
Czy nie ma możliwości ,żeby działało to na zasadze dla każdego przedmiotu zrób nową tabele ?

A jeśli chodzi o moje stwierdzenie tabela ale nie tabela to chodzi mi o wyświetlenie tego "dziennika" jako tabelki ,a nie o utworzenie tabeli w bazy danych

edytowany 1x, ostatnio: Gumish, 2014-12-11 14:56

Pozostało 580 znaków

2014-12-11 15:07
0

Jest możliwość. Skorzystaj z tabeli przestawnej, użyj PIVOT + dynamiczny SQL.


"There are people who actually like programming. I don't understand why they like programming."
Rasmus Lerdorf
edytowany 1x, ostatnio: Vardamir, 2014-12-11 15:11

Pozostało 580 znaków

2014-12-11 15:31
0

Może coś około GROUP_CONCAT i DISTING


SELECT CONCAT(TRIM(Uczniowie.Imie)," ",TRIM(Uczniowie.Nazwisko)) AS Uczen,GROUP_CONCAT(DISTING Przedmioty.Nazwa_przedmiotu SEPARATOR ",")  FROM Uczniowie
... 

Oczywiście jeszcze jakiś JOIN by się przydał. Nie mam jak tego przetestować ale coś by się chyba z tego dało wyrzeźbić.

DISTING? - ŁF 2014-12-11 16:44
Sory. chyba coś koło DISTINCT - perlon 2014-12-11 17:44
Będę czepiać się dalej: trim, distinct, łaczenie tabel po nazwach... Dane z bazy zwykle są "zaufane", inaczej - zawsze poprawne, czyli trim jest zbędny. Distinct jest koszmarnie niewydajny, podobnie niewydajne jest łączenie tabel po czymś innym, niż klucz główny, a robienie z nazwy przedmiotu klucza głównego jest słabym rozwiązaniem. - ŁF 2014-12-11 18:11

Pozostało 580 znaków

2014-12-11 16:50
ŁF
0

Zaprojektuj tę bazę danych koszernie:
Uczniowie - Id, Imię, Nazwisko (albo Użytkownicy - Id, Imię, Nazwisko, Nauczyciel (bit))
Przedmioty - Id, Nazwa, ewentualnie NauczycielId (FK do Użytkownicy.Id)
Oceny - Id, PrzedmiotId, Ocena, Data, ewentualnie NauczycielId na wypadek zastępstw itp (FK do Użytkownicy.Id)

Robienie osobnej tabeli dla każdego przedmiotu to porażka, tak samo jak dodawanie kolumny per przedmiot. Baza danych nie jest w 3NF (http://pl.wikipedia.org/wiki/Posta%C4%87normalna%28bazy_danych%29), jest trudniejsza w utrzymaniu, wymaga pisania osobnych zapytań pod każdy przedmiot. Porażka pod każdym względem.


Tak z ciekawości, zalecacie zawsze robić bazę zgodną z 3NF? - deadparty211 2014-12-11 16:55
Tak, chyba że względy wydajnościowe w danym miejscu są ważniejsze. - ŁF 2014-12-11 16:59
3NF to standard w jakim powinna być baza a potem dodaj się różne nadmiarowe pola, żeby było szybciej :p - abrakadaber 2014-12-12 08:27

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0