Avatar billede flaperman Nybegynder
30. september 2003 - 10:06 Der er 10 kommentarer

Join af tre tabeller, og returnering af bestemte rækker

Hej Folkens,

Jeg har et problem jeg har tumlet med et par dage, jeg ved det kan lade sig gøre, men jeg kan ikke lige regne den ud.

Først et par tabeller:

tbl_user:
+----------+--------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id      | int(11)      |      | PRI | NULL    | auto_increment |
| username | varchar(255) |      |    |        |                |
| password | varchar(255) |      |    |        |                |
+----------+--------------+------+-----+---------+----------------+

tbl_userGroup:
+---------+---------+------+-----+---------+-------+
| Field  | Type    | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| userId  | int(11) |      | PRI | 0      |      |
| groupId | int(11) |      | PRI | 0      |      |
+---------+---------+------+-----+---------+-------+

tbl_group:
+-------+--------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      |      | PRI | NULL    | auto_increment |
| name  | varchar(255) |      |    |        |                |
+-------+--------------+------+-----+---------+----------------+

Dernæst lidt data:

tbl_user:
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | user1    | pass    |
|  2 | user2    | pass    |
+----+----------+----------+

tbl_userGroup:
+--------+---------+
| userId | groupId |
+--------+---------+
|      1 |      1 |
|      1 |      3 |
|      2 |      2 |
+--------+---------+

tbl_group:
+----+---------+
| id | name    |
+----+---------+
|  1 | Group 1 |
|  2 | Group 2 |
|  3 | Group 3 |
+----+---------+

Lige for at være på den sikre side, så er der altså en mange->mange forbindelse mellem brugere og grupper.

Og så spørgsmålet:
- Brugeren med id=1 er medlem af grupperne med id=1 og id=3 - hvordan laver jeg en sætning der giver mig de grupper som brugeren IKKE er medlem af?

Venligst,

-- Brian
Avatar billede simonvalter Praktikant
30. september 2003 - 15:13 #1
select tbl_user.username,tbl_group.name from tbl_user,tbl_userGroup,tbl_group WHERE tbl_userGroup.userid != tbl_user.id AND tbl_userGroup.groupid = tbl_group.id;


det virker her
Avatar billede simonvalter Praktikant
30. september 2003 - 15:16 #2
+----------+---------+
| username | name    |
+----------+---------+
| user2    | Group 1 |
| user2    | Group 3 |
| user1    | Group 2 |
+----------+---------+
Avatar billede flaperman Nybegynder
30. september 2003 - 15:19 #3
Det giver mig de grupper som brugeren ER medlem af? Det er nemt nok, det jeg ikke kan regne ud er hvordan man laver en der giver mig de grupper som brugeren IKKE er medlem af (uafhængigt af om gruppen har medlemmer i forvejen).
Avatar billede flaperman Nybegynder
30. september 2003 - 15:20 #4
Hold on.
Avatar billede flaperman Nybegynder
30. september 2003 - 15:22 #5
Jep, så fik jeg lige testet den.

Den virker kun delvist... Hvis man tilføjer en ny gruppe, og der ingen medlemmer er at gruppen, så bliver den gruppe ikke sendt tilbage.

Undskyld forvirringen...
Avatar billede simonvalter Praktikant
30. september 2003 - 17:52 #6
jeg kan ikke lige finde ud af det .. ;)
men jeg kan da finde de grupper der ikke er nogen i

SELECT tbl_user.username, tbl_group.name
FROM tbl_group, tbl_user
WHERE tbl_group.id NOT
IN (
SELECT groupid
FROM tbl_userGroup )


hvis du skal have det hele i en query kunne jeg forestille mig du skal have fat i
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id
                                      WHERE table2.id IS NULL;


men jeg kan ikke få det til at spille .. måske kan du.
Avatar billede flaperman Nybegynder
30. september 2003 - 19:28 #7
Én sætning er at foretrække - det ser smartest ud :-)

Det er muligvis noget som ligner det sidste, men jeg kan ikke finde ud af det :-(
Avatar billede fizz Nybegynder
04. oktober 2003 - 02:23 #8
ok
Avatar billede eagleeye Praktikant
04. oktober 2003 - 11:11 #9
fizz>> Stop med at spamme med ligegyldige svar når du ikke engang har deltaget i spørgsmålet. Har du ikke noget fornuftigt at bidrage med så undlad at svare/kommentere.

eagleeye / CoAdmin
Avatar billede simonvalter Praktikant
31. maj 2004 - 17:25 #10
fandt du ud af det?
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