Avatar billede benne_ Nybegynder
29. november 2004 - 16:18 Der er 10 kommentarer

SQL-query - flere joins

Jeg har en user-tabel, hvor mine brugere er stored i, med et unikt userId i form af en int - så har jeg en gruppe-tabel, hvor der er defineret nogle grupper, som også har en unik gruppeId - disse er linket sammen af en relations-tabel, som har et unikt relId for hver relation, en angivelse af userId og gruppeId - altså for at brugere kan være medlem af flere grupper...

Så langt, så godt...

For det ikke skal være løgn, så har jeg også en projekt-tabel, som er udstyret med et unikt projektId, og som indeholder div. beskrivelser... Denne tabel og gruppe-tabellen danner også grund for en relations-tabel der relatere grupper til projekter...

Så jeg har tre tabeller - en user, en gruppe og en projekt - user og gruppe har en relations-tabel, og gruppe og projekt har en relations-tabel...

Dette skal så joines sammen på en måde, så jeg ud fra et userId, kan få at vide hvilke projekter en bruger er med i - hvordan kan man smide en query op der returnere det...?
Avatar billede fixxxer Nybegynder
29. november 2004 - 16:27 #1
du er vel ude i noget LEFT eller RIGHT JOIN på de tabeller du skal have information fra, eller sortere udtrykket med WHERE på en eller flere tabeller.

Skal du have hjælp til SQL'en og har du selv noget du måske kan bidrage med?
Avatar billede benne_ Nybegynder
29. november 2004 - 16:29 #2
Jeg søger en komplet Query til det ønskede formål.... Er ikke så skrap til det
Avatar billede fixxxer Nybegynder
29. november 2004 - 16:44 #3
nu kender jeg ikke alle dine felter, så jeg gætter mig frem til et resultat:

SELECT A.userID FROM userTable A
LEFT JOIN relTable B ON B.relUser = A.userID
INNER JOIN projektTable C ON C.projektID = B.relProjekt
RIGHT JOIN gruppeTable D ON D.gruppeID = A.userGruppe

Det er i hvertfald principet i det.. er et vildt skud i tågen..
Avatar billede fixxxer Nybegynder
29. november 2004 - 16:52 #4
Nu har jeg lavede en mere udførlig query, som arbejde på nogle tabeller der ikke kun fantes inde i mit hoved :-)

SELECT A.userID, A.userNavn, C.projektNavn FROM userTable A
LEFT JOIN relTable B ON B.relUser = A.userID
LEFT JOIN projektTable C ON C.projektID = B.relProjekt
LEFT JOIN gruppeTable D ON D.gruppeID = A.userGruppe
Avatar billede fixxxer Nybegynder
29. november 2004 - 16:52 #5
userID,userNavn,projektNavn
1,Bent,Skibsbyggeri
1,Bent,Hvalfangst
1,Bent,Hestetæmmer
2,Knud,Hestetæmmer
2,Knud,Skibsbyggeri
3,Hans,Hvalfangst
Avatar billede fixxxer Nybegynder
29. november 2004 - 17:01 #6
Jeg ved ikke om du er klar på at mysql returnere de rene data, som godt kan virke overskuelige og hvis man ønsker at sætte det op på en bestemt facon skal man bruge en form for front-end.. medmindre du selvfølgelig ønsker at have en rå liste med de angivne data..
Avatar billede fixxxer Nybegynder
29. november 2004 - 17:01 #7
Uoverskuelige :)
Avatar billede fixxxer Nybegynder
29. november 2004 - 17:01 #8
Her er et eksempel:

userID,userNavn,projektNavn,gruppeNavn
1,Bent,Skibsbyggeri,Begyndergruppen
1,Bent,Skibsbyggeri,Expertgruppen
1,Bent,Hvalfangst,Begyndergruppen
1,Bent,Hvalfangst,Expertgruppen
1,Bent,Hestetæmmer,Begyndergruppen
1,Bent,Hestetæmmer,Expertgruppen
2,Knud,Hestetæmmer,Begyndergruppen
2,Knud,Skibsbyggeri,Begyndergruppen
3,Hans,Hvalfangst,Expertgruppen
Avatar billede benne_ Nybegynder
29. november 2004 - 23:22 #9
Det var måske lidt forkert forklaret...

Jeg har følgende tabeller:

tblUsers:
UserId, Navn
1, Martin
2, Morten
3, Mikkel
...

tblGroups:
GroupId, Navn
1, Gruppe nr. 1
2, Gruppe nr. 2
3, Gruppe nr. 3
...

tblUsersGroupsRel:
RelId, UserId, GroupId
1, 1, 1
2, 1, 2
3, 1, 3
4, 2, 2
5, 3, 3
...

På nuværende tidspunkt kan vi se, at User 1 (Martin) er linket til gruppe 1, 2 og 3, mens de to andre er linket til en grupe hver (2 og 3).

tblProjects:
ProjectId, Navn
1, Projekt nr. 1
2, Projekt nr. 2
3, Projekt nr. 3
...

tblGroupsProjectsRel:
RelId, GroupId, ProjectId
1, 1, 1
2, 2, 2
3, 2, 3
4, 3, 3
...

Her ser vi at gruppe 2 er linket til projekt 2 og 3, mens projekt 1 er linket til projekt 1, og gruppe 3 er linket til projekt 3...

Det jeg søger er så bare...

Når jeg fyre min statement af...

SELECT ... bla bla bla... WHERE UserId = 1; Så får jeg project-navnene som Martin er med i (han er medlem af gruppe 1, 2 og 3, og skal derfor kunne se de projekter der relateret til de grupper).

Ligesom når jeg fyre samme statement af med WHERE UserId = 2; Så får jeg projektnavnene som Morten er med i (hvilket er projekt 2 og 3, da han er linket til gruppe 2, som er med i projekt 2 og 3)....

Puha...
Avatar billede fixxxer Nybegynder
30. november 2004 - 07:01 #10
Okay, det var jo lidt noget andet, men det kan også sagtens lade sig gøre.. jeg brygger lige en SQL til dig senere i dag.. det er sku for tidligt at skrive SQL'er nu :-)

Men har du tænkt på i hvilket front-end du skal vise og behandle dine udtryk?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester