MySql - zapytanie

GU
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 7 lat
  • Postów:13
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

fourfour
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 9 lat
  • Postów:627
1

Jest możliwość.

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
0

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


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
fourfour
Pewnie, żeby to wypluć do jakiegoś csv.
plug
  • Rejestracja:ponad 10 lat
  • Ostatnio:4 dni
  • Lokalizacja:Krk
0

Rozwiązanie na Oraclu:

Kopiuj
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
GU
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 7 lat
  • Postów:13
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
Vardamir
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 8 lat
  • Lokalizacja:Wrocław
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
perlon
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:33
0

Może coś około GROUP_CONCAT i DISTING

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

perlon
Sory. chyba coś koło DISTINCT
ŁF
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
Moderator
  • Rejestracja:ponad 22 lata
  • Ostatnio:2 dni
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%87_normalna_%28bazy_danych%29), jest trudniejsza w utrzymaniu, wymaga pisania osobnych zapytań pod każdy przedmiot. Porażka pod każdym względem.


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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.