Avatar billede slapstick Nybegynder
16. august 2005 - 15:32 Der er 23 kommentarer og
1 løsning

problem med multi inner joins

jeg har 4 tabeller
packages der består af packageid,displayname,company
services der består af serviceid,servicetype,displayname
packageservices der består af packageid,serviceid
userpackages der består af userid,packageid,expiredate

det jeg vil er at få alle packages der hører til et bestemt userid, finde ud af hvilke services der er i de packages og derefter hente de services der er i de relevante packages
så jeg ender med at få:
services.serviceid, services.servicetype, services.displayname, userpackages.expiredate

er det ikke muligt noget med inner join værk???

og så derefter sortere så den samme service ikke dukker op to gange(hvis der er dubletter) men at den derimod tager den med den nyeste expiredate
Avatar billede slapstick Nybegynder
16. august 2005 - 15:35 #1
skal lige siges at mit udgangspunkt er userid...
Avatar billede fennec Nybegynder
16. august 2005 - 15:46 #2
Prøv med denne:

sql = "select services.serviceid, services.servicetype, services.displayname, max(userpackages.expiredate) "&_
  "from services inner join packageservices on packageservices.serviceid = services.id "&_
  "inner join packages on packages.id = packageservices.packageid "&_
  "inner join userpackages on userpackages.packageid = packages.id "&_
  "group by services.serviceid, services.servicetype, services.displayname "
Avatar billede fennec Nybegynder
16. august 2005 - 15:48 #3
Det skal lige siges at det ikke nødvendigvis er den nyeste expiredate. Det er den største, og det behøver ikke nødvendigvis ikke være den sidste indsatte. Men mon ikke den seneste også er den største alligevel :o)
Avatar billede slapstick Nybegynder
16. august 2005 - 15:50 #4
uden lige at have testet det.. hvad så med userid? det er nemlig det eneste info jeg har til at starte med og den ska kun arbejde med de packages et bestemt userid har
Avatar billede slapstick Nybegynder
16. august 2005 - 15:52 #5
ja mit datoformat er yyyymmdd så den nyeste vil altid være den største hehehe
Avatar billede fennec Nybegynder
16. august 2005 - 15:56 #6
Det smider du på en where:

sql = "select services.serviceid, services.servicetype, services.displayname, max(userpackages.expiredate) "&_
  "from services inner join packageservices on packageservices.serviceid = services.id "&_
  "inner join packages on packages.id = packageservices.packageid "&_
  "inner join userpackages on userpackages.packageid = packages.id "&_
  "where userpackages.userID="& DitUserID &" "&_
  "group by services.serviceid, services.servicetype, services.displayname "
Avatar billede slapstick Nybegynder
16. august 2005 - 15:57 #7
smukt tak jeg tester !!
Avatar billede slapstick Nybegynder
16. august 2005 - 16:04 #8
æv den returnede 0 rækker hvor den sku ha returneret 41
Avatar billede fennec Nybegynder
16. august 2005 - 16:06 #9
Prøv lige at fjern max og group by delen:

sql = "select services.serviceid, services.servicetype, services.displayname, userpackages.expiredate "&_
  "from services inner join packageservices on packageservices.serviceid = services.id "&_
  "inner join packages on packages.id = packageservices.packageid "&_
  "inner join userpackages on userpackages.packageid = packages.id "&_
  "where userpackages.userID="& DitUserID
Avatar billede slapstick Nybegynder
16. august 2005 - 16:08 #10
gir os 0 rækker
Avatar billede fennec Nybegynder
16. august 2005 - 16:33 #11
Og du er 100% sikker på at der er pakker tilhørende userID'et og at de pakker er tilknyttet en service...

Ellers må vi til at udbygge SQL'en et join af gangen :o)
Avatar billede slapstick Nybegynder
16. august 2005 - 16:55 #12
yesh jeg er helt sikker hehe
Avatar billede slapstick Nybegynder
16. august 2005 - 18:25 #13
det slår mig også lige at packages tabellen slet ikke er nødvendig da det eneste man skulle bruge fra den var packageid men det står jo også i userpackages..
Avatar billede fennec Nybegynder
17. august 2005 - 08:13 #14
Nu tager vi det et led af gangen. Virker denne:

sql = "select packageid "&_
  "from userpackages "&_
  "where userpackages.userID = "& DitUserID
Avatar billede cpufan Juniormester
17. august 2005 - 22:30 #15
sql = "select services.serviceid, services.servicetype, services.displayname, userpackages.expiredate "&_
  "from services inner join packageservices on packageservices.serviceid = services.id "&_
  "inner join packages on packages.id = packageservices.packageid "&_
  "inner join userpackages on userpackages.packageid = packages.id "&_
  "where userpackages.userID="& DitUserID

burde jo give syntaxfejl da dine ids hedder packages.packageid osv....
men du siger at den giver 0 ????
Avatar billede fennec Nybegynder
18. august 2005 - 08:30 #16
Er du her stadig....

Hvis den tidligere sql virker, så prøv med denne:
sql = "select packageservices.serviceid "&_
  "from userpackages "&_
  "inner join packageservices on packageservices.packageid=userpackages.packageid "&_
  "where userpackages.userID = "& DitUserID
 
Hvis den også virker, kan vi gå til næste:
sql = "select services.serviceid, services.servicetype, services.displayname "&_
  "from userpackages "&_
  "inner join packageservices on packageservices.packageid=userpackages.packageid "&_
  "inner join services on services.serviceid=packageservices.serviceid "&_
  "where userpackages.userID = "& DitUserID
 
Og til sidst denne:
sql = "select services.serviceid, services.servicetype, services.displayname, max(userpackages.expiredate) "&_
  "from userpackages "&_
  "inner join packageservices on packageservices.packageid=userpackages.packageid "&_
  "inner join services on services.serviceid=packageservices.serviceid "&_
  "where userpackages.userID = "& DitUserID &" "&_
  "group by services.serviceid, services.servicetype, services.displayname "
Avatar billede slapstick Nybegynder
18. august 2005 - 10:34 #17
hey
sorry jeg ik har svaret sad i møde hele dagen i går zzz
cpufan: ja men jeg rettede selv de id's der
fennec: yesh så spiller det :)))))) mange tak !!
har lige et ekstra spørgsmål nu du er s¨vild til inner joins

hvis nu jeg vil joine den med endnu en tabel jeg har
INNER JOIN services ON service_language.serviceid = services.serviceid
har prøvet at smide den ind efter de andre men får en fejl ser siger "Not unique table/alias: 'services'"

og smid et svar så du kan få point :oD
Avatar billede fennec Nybegynder
18. august 2005 - 10:47 #18
services er allerede joinet. Du skal joine service_language:

sql = "select services.serviceid, services.servicetype, services.displayname, max(userpackages.expiredate) "&_
  "from userpackages "&_
  "inner join packageservices on packageservices.packageid=userpackages.packageid "&_
  "inner join services on services.serviceid=packageservices.serviceid "&_
  "inner join service_language ON service_language.serviceid = services.serviceid "&_
  "where userpackages.userID = "& DitUserID &" "&_
  "group by services.serviceid, services.servicetype, services.displayname "
Avatar billede slapstick Nybegynder
18. august 2005 - 10:59 #19
det er fandme smukt det spiller jo bare
du er dagens mand i skysovs :)
takker !!
Avatar billede fennec Nybegynder
18. august 2005 - 11:07 #20
No prob. Og tak for point.
.o) <-- One Eyed Jack
Avatar billede slapstick Nybegynder
19. august 2005 - 11:07 #21
aloha nu ved jeg ik om du holder øje med det her fennec men jeg har lige et opfølgningsspørgsmål hehehe
jeg har tilføjet et felt i userpackage tabellen der definerer om en en pakke med services er trial eller ej
men dvs at når jeg laver mit udtræk så må den godt ha samme service to gange så længe den ene er trial og den anden ikke er..
jeg prøvede at gøre sådan her:

SELECT services.serviceid, services.servicetype, services.displayname, userpackages.packageusage, MAX(userpackages.expiredate) AS expiredate FROM userpackages INNER JOIN packageservices ON packageservices.packageid=userpackages.packageid INNER JOIN services ON services.serviceid=packageservices.serviceid WHERE userpackages.brugerid = '1125' GROUP BY services.serviceid, services.servicetype, services.displayname ORDER BY services.serviceid ASC

men der tager den stadig kun hver service 1 gang selvom man har dem som både trial og almindelig
Avatar billede fennec Nybegynder
19. august 2005 - 11:18 #22
Den burde næsten komme med en fejl i stedet, da du ikke har userpackages.packageusage med på "group by"

... GROUP BY services.serviceid, services.servicetype, services.displayname, userpackages.packageusage ORDER BY..
Avatar billede slapstick Nybegynder
19. august 2005 - 11:21 #23
ah doh hehehe det spiller bare :D
Avatar billede slapstick Nybegynder
19. august 2005 - 11:21 #24
og tak !!!
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
Kurser inden for grundlæggende programmering

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