Avatar billede peterlang Nybegynder
18. juli 2001 - 18:04 Der er 13 kommentarer og
1 løsning

Problemmer med SQL sætning.

Jeg har et problem, jeg har 3 tabeller

1/ cd        (cdid, cdtitel)
2/ genrelink  (cdid, genreid)
3/ genre      (genreid, genre)

Jeg vil gerne finde alle CD´er jeg har i min database + genre (nogle cd har flere genre)

problem 1/ Den finder kun de CD´er jeg har tildelt en genre
problem 2/ Den viser kun 1 genre, ved de CD´er der har flere genre

hvordan gøres dette?


<%
sql = \"SELECT cd.titel, genrelink.cdid, genre.genre FROM cd INNER JOIN genrelink ON cd.cdid = genrelink.cdid INNER JOIN genre ON genrelink.cdid = genre.genreid\"


Set dbconn = Server.CreateObject(\"ADODB.Connection\")
    dbconn.open \"DSN=cdbutik;UID=sa;PWD=\"

    set rs= kgconn.execute(sql)

if not rs.eof = true then
   
    rs.MoveFirst

do while Not rs.eof

response.write rs.fields(\"titel\")&\" - \"&rs.fields(\"genre\")
     
rs.MoveNext
loop

end if
%>



Peter Lang
Avatar billede nolle_k Nybegynder
18. juli 2001 - 18:13 #1
SELECT cd.titel, genrelink.cdid, genre.genre FROM cd LEFT JOIN genrelink ON cd.cdid = genrelink.cdid INNER JOIN genre ON genrelink.cdid = genre.genreid

Det vil sige at du bare skal ændre første inner join til LEFT JOIN!\"


//Nolle_K
Avatar billede peterlang Nybegynder
18. juli 2001 - 18:24 #2
Det hjalp lidt lidt, men der er stadig problemmer

problem 1/ Den finder stadig kun de CD´er jeg har tildelt en genre.
problem 2/ nu hvis en CD har flere genre viser den cd´ens titel flere gange.

Peter Lang


Avatar billede nolle_k Nybegynder
18. juli 2001 - 18:27 #3
Prøv at fjerne fra det sidste INNER JOIN og frem og ogås genre.genre! Det vil sige at SQL ser således ud

SELECT cd.titel, genrelink.cdid FROM cd LEFT JOIN genrelink ON cd.cdid = genrelink.cdid

Viser den nu alle CD\'er???
Avatar billede peterlang Nybegynder
18. juli 2001 - 18:33 #4
Fejl!!

ADODB.Recordset error \'800a0cc1\'
Item cannot be found in the collection corresponding to the requested name or ordinal.

sog.asp, line 85

Avatar billede nolle_k Nybegynder
18. juli 2001 - 18:36 #5
HAr du skrevet sætning som jeg har gjort! Lav en Copy! Husk at genre.genre skal væk
Avatar billede peterlang Nybegynder
18. juli 2001 - 18:39 #6
Jep..

Den viser nu alle CD´er, men hvad med genrene?




Avatar billede nolle_k Nybegynder
18. juli 2001 - 18:41 #7
Prøv med right eller left join på den sidste join også og se om ikke det gør en forskel!

Avatar billede peterlang Nybegynder
18. juli 2001 - 18:46 #8
med LEFT JOIN viser den alle titler også den der ikke har nogle genre.
med hvordan får man den til at vise alle genre på dem der har flere genre

Avatar billede nolle_k Nybegynder
18. juli 2001 - 18:47 #9
Prøv med RIGHT JOIN ELler FULL join
Avatar billede peterlang Nybegynder
18. juli 2001 - 18:55 #10
Det virker nu. men hvis en title har feks. 3 genre, bliver titlen fundet 3 gange, med forkelige genre.

Jeg må vel køre MoveNext og se om næste titel er den samme, hvis ja har jeg genre 2 O.S.V

Jeg haved håbet der var en smarter måde.
Men sådan der det.

Avatar billede peterlang Nybegynder
18. juli 2001 - 18:56 #11
Tak for hjælpen
Avatar billede nolle_k Nybegynder
18. juli 2001 - 18:57 #12
I orden!
Avatar billede nolle_k Nybegynder
18. juli 2001 - 19:11 #13
Det er der ikke!

Hvordan ville du have returneret det??
Det kan ikke gøres smartere!
Avatar billede peterlang Nybegynder
18. juli 2001 - 19:15 #14
Jeg ved det ikke jeg er lige starte på MS SQl

do while Not rs.genre.eof
response.write rs.fields(\"genre\")
rs.genre.MoveNext
loop

Virker ikke
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