Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: MySQL - procedura - prośba o pomoc w wyrobieniu się w terminie

20.02.2012 17:05
legrooch
1
legrooch
237
MPO Squad Member

MySQL - procedura - prośba o pomoc w wyrobieniu się w terminie

Witam,

potrzebuję pomocy, bo nagle obudziłem się z ręką w nocniku.

Mam 4 tabele:
user - id, imie, nazwisko, rok, grupa
user_info - id, userid, typ, tresc
przedmiot - id, tresc
slownik - id, nazwa_przedmiotu, rok, grupa, id_przedmiotu

na podstawie ich kombinacji muszę uzupełnić czwarta zależnie od zawartych w niej wariantów.
wynik - id, id_przedmiotu, id_osoby

Tabela user zawiera proste dane. W user_info znajdują się dodatkowe pola dla usera, jak rok szkolenia i grupa oraz nazwa szkolenia
Tabela przedmiot zawiera id przedmiotu i jego nazwę.
Tabela slownik zawiera opis co powinno gdzie wpaść.

Potrzebuję procedury, która przeanalizuje, na którym roku i w której grupie użytkownik się znajduje (user, user_info), a następnie w oparciu o tabelę slownik uzupełni (INSERT lub UPDATE) tabelę wynik.

Czy zechciałoby się komuś pomóc w tej sprawie? :) Ojciec chorego dziecka prosi o pomoc :)

20.02.2012 17:11
2
odpowiedz
ElNinho
159
STROH 80

tak na szybko to masz 5 tabel :)
nie wprowadzaj czytelników w błąd ;)

co to jest typ w user_info? bo jak tak popatrzeć na te tabele to user_info jest do niczego nie potrzebna

i coś lewizna z tą tabelą wynik ...
niby na jakiej podstawie tam ma być UPDATE ?

nie wiem czy takie coś działa w MySQL, ale w Oracle ... ;)

FOR i IN (SELECT p.Id pid, u.Id uid
FROM Slownik s, USER u, Przedmiot p
WHERE s.Is_Przedmiotu = p.Id
AND s.Rok = u.Rok
AND s.Grupa = u.Grupa) LOOP
INSERT INTO wynik (id_przedmiotu, id_osoby) VALUES (i.pi, i.uid);
END LOOP;

pod warunkiem, że id w tabeli WYNIK jest oparte na jakiejś sekwencji

20.02.2012 18:44
legrooch
3
odpowiedz
legrooch
237
MPO Squad Member

niunia ==> Nie czepiaj się :)

User_info składuje informacje o roku, grupie

Generalnie muszę każdego wziąć użytkownika z user, sprawdzić co ma wpisane w typ. Jeżeli rok 2012 i rok I, to sprawdzam w słowniku ID przemiotów, gdzie mam 2012 i I.
Następnie dla tej osoby generuję INSERT lub UPDATE do wyniku podając id_przedmiotu z user i ID przedmiotu ze słownika

Teraz może prościej :)
Do obróbki na około 15 tys rekordów (userów), gdzie przedmioty dla danego rocznika w danym roku występują w ilości około 10.

20.02.2012 18:49
4
odpowiedz
ElNinho
159
STROH 80

gruszek, ale podałeś na samej górze, że info o roku i grupie masz w tabeli user

a w tabeli wynik masz id_przedmiotu i id_usera - na moje oko tam jest tylko insert, bo nie wiem co i jak można zupdatować

20.02.2012 19:11
legrooch
5
odpowiedz
legrooch
237
MPO Squad Member

Popełniłem błąd z danymi na płasko w user (nie ma tam danych usera jednak), wszystko mam w user_info.
Niunia ==> Użytkownik jest na jakimś roku (user + user_info), mam do tego słownik przedmiotów (przedmiot) oraz tabelę zestawienia przedmiotu do rocznika i grupy (slownik)

Za pomocą tego muszę wygenerować rozpiskę zajęć użytkownika podając te dane do tabeli wynik.

Mam nadzieję, że teraz bardziej nie zakręciłem :)

20.02.2012 19:54
6
odpowiedz
ElNinho
159
STROH 80

no to zakładając, że na tabeli WYNIK masz jakąś sekwencję ustalającą ID, można to zrobić jednym insertem:

INSERT INTO Wynik (Id_Przedmiotu, Id_Osoby)
SELECT P.Id, U.Id
FROM User U, User_Info UI, Slownik S, Przedmiot P
WHERE U.Id = UI.User_Id
AND S.Id_Przedmiotu = P.Id
AND UI.Rok = S.Rok -- zakładam, że info o roku i grupie masz w user_info
AND UI.Grupa = S.Grupa;

20.02.2012 20:01
legrooch
7
odpowiedz
legrooch
237
MPO Squad Member

Dzięki niunia, sprawdzę jutro z rana. za dużo roboty w domu się porobiło :/

21.02.2012 11:04
8
odpowiedz
ElNinho
159
STROH 80

No i no i ? udało się ?

21.02.2012 11:17
legrooch
9
odpowiedz
legrooch
237
MPO Squad Member

Czytam 36 z 68 maili :/
Sprawdzę, słowo :)

21.02.2012 12:27
legrooch
10
odpowiedz
legrooch
237
MPO Squad Member

Działa po paru zmianach pod moją strukturę :)

21.02.2012 12:45
11
odpowiedz
ElNinho
159
STROH 80

tadam!! :)

Forum: MySQL - procedura - prośba o pomoc w wyrobieniu się w terminie