/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
SQL - læse fra 2 tabeller ?
Fra : Jakob Munck


Dato : 29-03-02 20:03

Jeg har en site (www.ansgar.dk ), hvortil forfattere skriver artikler, og
jeg vil gerne lave en udskrift, hvor jeg lister forfatterne (fra tabellen
"forfattere") og samtidig - ud for hver forfatter - viser hvor mange
artikler den pågældende har skrevet. Dette skal tælles imidlertid op fra en
anden tabel, nemlig "artikler", hvor der for hver artikel er angivet et
"forfatterId". Antallet af artikler forfatteren har skrevet, er altså
identisk med antallet af gange hans ID-nummer står i kolonnen "forfatterId"
i tabellen "artikler".

Jeg har lavet den almindelige loop-kode, som lister forfatterne. Men hvordan
udvider man denne kode, så der ud for hver forfatter der loopes igennem
optælles hvor mange gange hans "forfatterId" optræder i tabellen
"artikler"???

Jeg håber jeg har gjort mig forståelig. Her er min nuværende kode, der
lister forfatterne:

<%
.....
Sql = "select * from forfattere order by efternavn"
Set rs = Conn.Execute(Sql)
Do until rs.eof

Rowcount = Rowcount + 1
If Rowcount/2 = Int(Rowcount/2) Then

Response.Write "<tr bgcolor=e0e0e0 height=20><td class=sort11
align=left>&nbsp;&nbsp;&nbsp;<a href=""" &
"ansgar.asp?mode=vis_profil&fid=" & rs("ID") & """ target='_self'>" &
rs("efternavn") & ",&nbsp;" & rs("fornavn") & "</td></tr>"

else

Response.Write "<tr bgcolor=f0f0f0 height=20><td class=sort11
align=left>&nbsp;&nbsp;&nbsp;<a href=""" &
"ansgar.asp?mode=vis_profil&fid=" & rs("ID") & """ target='_self'>" &
rs("efternavn") & ",&nbsp;" & rs("fornavn") & "</td></tr>"

end if
rs.movenext
loop
......
%>

Hvordan skal denne kode udvides, så den også optæller antal gange hans ID
optræder i tabellen "artikler"?


v.h.
Jakob Munck



 
 
Torben Brandt (29-03-2002)
Kommentar
Fra : Torben Brandt


Dato : 29-03-02 20:11

Jakob Munck wrote in dk.edb.internet.webdesign.serverside.asp:
> Jeg har en site (www.ansgar.dk ), hvortil forfattere skriver artikler, og
> jeg vil gerne lave en udskrift, hvor jeg lister forfatterne (fra tabellen
> "forfattere") og samtidig - ud for hver forfatter - viser hvor mange
> artikler den pågældende har skrevet. Dette skal tælles imidlertid op fra en
> anden tabel, nemlig "artikler", hvor der for hver artikel er angivet et
> "forfatterId". Antallet af artikler forfatteren har skrevet, er altså
> identisk med antallet af gange hans ID-nummer står i kolonnen "forfatterId"
> i tabellen "artikler".
>
> Jeg har lavet den almindelige loop-kode, som lister forfatterne. Men hvordan
> udvider man denne kode, så der ud for hver forfatter der loopes igennem
> optælles hvor mange gange hans "forfatterId" optræder i tabellen
> "artikler"???
>
> Jeg håber jeg har gjort mig forståelig. Her er min nuværende kode, der
> lister forfatterne:
>
> <%
&gt; .....
&gt; Sql = "select * from forfattere order by efternavn"
&gt; Set rs = Conn.Execute(Sql)
&gt; Do until rs.eof

<snip>

&gt; rs.movenext
&gt; loop
&gt; ......
&gt; %>
>
> Hvordan skal denne kode udvides, så den også optæller antal gange hans ID
> optræder i tabellen "artikler"?
>

Prøv dette noget besværlige SQL-udtræk:
----
SELECT Count(artikler.forfatterId) AS antal, forfattere.fornavn AS fornavn,
forfattere.efternavn AS efternavn, forfattere.ID AS ID FROM (artikler LEFT JOIN
forfattere ON artikler.forfatterId = forfattere.ID) GROUP BY forfattere.ID
ORDER BY forfattere.efternavn
----
Det skal stå som én linie

Jeg er ikke sikker på at GROUP BY harmonerer med alt det andet, men prøv dig
frem...
Jeg har prøvet at kalde alle tabeller og kolonner for det samme som dig, men
måske er der en smutter hist og her :)

Hvis det virker skulle du kunne skrive rs("antal"), rs("fornavn") osv ud på
samme måde som du plejer.

Hvis det ikke virker, så skriver du bare igen, mvh Torben

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jakob Munck (30-03-2002)
Kommentar
Fra : Jakob Munck


Dato : 30-03-02 07:32

>
> Prøv dette noget besværlige SQL-udtræk:
> ----
> SELECT Count(artikler.forfatterId) AS antal, forfattere.fornavn AS
fornavn,
> forfattere.efternavn AS efternavn, forfattere.ID AS ID FROM (artikler LEFT
JOIN
> forfattere ON artikler.forfatterId = forfattere.ID) GROUP BY forfattere.ID
> ORDER BY forfattere.efternavn
> ----

Imponerende sætning, men den giver følgende fejlmelding:

"Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access-driver] Du har forsøgt at køre en
forespørgsel, der ikke medtager det angivne udtryk "fornavn" som en del af
en aggregatfunktion."

Har du, eller andre, et forslag til forbedring?

v.h.
Jakob Munck






Jakob Munck (30-03-2002)
Kommentar
Fra : Jakob Munck


Dato : 30-03-02 10:26

Jeg har løst problemet. Jeg lavede proceduren med flere forskellige
SQL-kald, og så gik det lettere.

Tak for hjælpen.

v.h.
Jakob Munck




PS. Vil nogen se koden, så skriv direkte til mig.



Knud Berggreen (30-03-2002)
Kommentar
Fra : Knud Berggreen


Dato : 30-03-02 19:54

On Sat, 30 Mar 2002 10:25:40 +0100, "Jakob Munck"
<jakob.munck@tdcadsl.dk> wrote:

>Jeg har løst problemet. Jeg lavede proceduren med flere forskellige
>SQL-kald, og så gik det lettere.

Det er lettere at overskue men bruger uforholdsmæssigt mange flere
ressourcer.

/Knud



F.Larsen (30-03-2002)
Kommentar
Fra : F.Larsen


Dato : 30-03-02 23:56

Du kan ikke gruppere på "forfattere.efternavn" når feltet ikke indgår i listen
over felter i den første select.
Du skal derfor gruppere på "fornavn"

HINT: Når du foretager en gruppering kan du som hovedregel altid regne med at det
kun er et af felterne (Count,Sum...) som ikke skal medtages i GROUP BY tagget...
resten skal altid
som her: SELECT x,y,sum(z) .... GROUP BY x,y

--
Flemming
Støjdæmp din PC: http://hjem.get2net.dk/Quake2/AlphaPal8045T/index.htm
Asus A7V266-E.: http://hjem.get2net.dk/Quake2/LowNoise2/A7V266-E.htm


"Jakob Munck" <jakob.munck@tdcadsl.dk> wrote in message
news:3ca559b0$0$88715$edfadb0f@dspool01.news.tele.dk...
> Imponerende sætning, men den giver følgende fejlmelding:
>
> "Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
> [Microsoft][ODBC Microsoft Access-driver] Du har forsøgt at køre en
> forespørgsel, der ikke medtager det angivne udtryk "fornavn" som en del af
> en aggregatfunktion."


Torben Brandt (31-03-2002)
Kommentar
Fra : Torben Brandt


Dato : 31-03-02 00:08

F.Larsen wrote in dk.edb.internet.webdesign.serverside.asp:
> Du kan ikke gruppere på "forfattere.efternavn" når feltet ikke indgår i listen
> over felter i den første select.
> Du skal derfor gruppere på "fornavn"
>
> HINT: Når du foretager en gruppering kan du som hovedregel altid regne med at det
> kun er et af felterne (Count,Sum...) som ikke skal medtages i GROUP BY tagget...
> resten skal altid
> som her: SELECT x,y,sum(z) .... GROUP BY x,y
>

Ja, jeg havde godt på fornemmelsen at det ikke gik, men (jf andet indlæg) så har vi
kringlet den, så det godt kunne lade sig gøre alligevel - omend ikke på den pæneste
måde

Vil du ikke svare _under_ det du svarer på, så er det nemmere at læse.
Se evt. <http://www.usenet.dk/netikette/citatteknik.html>

God påske, Torben

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Torben Brandt (31-03-2002)
Kommentar
Fra : Torben Brandt


Dato : 31-03-02 00:02

Jakob Munck wrote in dk.edb.internet.webdesign.serverside.asp:
> >
> > Prøv dette noget besværlige SQL-udtræk:
> > ----
> > SELECT Count(artikler.forfatterId) AS antal, forfattere.fornavn AS
> fornavn,
> > forfattere.efternavn AS efternavn, forfattere.ID AS ID FROM (artikler LEFT
> JOIN
> > forfattere ON artikler.forfatterId = forfattere.ID) GROUP BY forfattere.ID
> > ORDER BY forfattere.efternavn
> > ----
>
> Imponerende sætning, men den giver følgende fejlmelding:
>
> "Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
> [Microsoft][ODBC Microsoft Access-driver] Du har forsøgt at køre en
> forespørgsel, der ikke medtager det angivne udtryk "fornavn" som en del af
> en aggregatfunktion."
>
> Har du, eller andre, et forslag til forbedring?
>
Efter at have set Jakobs kode, er vi nået frem til at følgende virker:
SELECT Count(artikler.forfatterId) AS antalArtikler, FIRST(forfattere.fornavn)
AS fornavn, FIRST(forfattere.efternavn) AS efternavn, FIRST(forfattere.ID) AS
id FROM (artikler LEFT JOIN forfattere ON artikler.forfatterId = forfattere.ID)
GROUP BY forfattere.ID ORDER BY FIRST(forfattere.efternavn)

Der er en del "hokus pokus", men I kan skrive hvis I vil have en forklaring -
så skal I også nok få den

God påske, Torben

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Knud Berggreen (30-03-2002)
Kommentar
Fra : Knud Berggreen


Dato : 30-03-02 11:31

On Fri, 29 Mar 2002 20:03:07 +0100, "Jakob Munck"
<jakob.munck@tdcadsl.dk> wrote:

>Jeg har en site (www.ansgar.dk ), hvortil forfattere skriver artikler, og
>jeg vil gerne lave en udskrift, hvor jeg lister forfatterne (fra tabellen
>"forfattere") og samtidig - ud for hver forfatter - viser hvor mange
>artikler den pågældende har skrevet. Dette skal tælles imidlertid op fra en
>anden tabel, nemlig "artikler", hvor der for hver artikel er angivet et
>"forfatterId". Antallet af artikler forfatteren har skrevet, er altså
>identisk med antallet af gange hans ID-nummer står i kolonnen "forfatterId"
>i tabellen "artikler".

Kan du ikkee bruge noget i stil med:

SELECT forfattere.forfatternavn, count(*) as antalartikler
FROM forfattere, artikler
WHERE artikler.forfatterid = forfattere.forfatterid
GROUP BY forfattere.forfatternavn

/Knud


Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste