Avatar billede orackel Nybegynder
27. september 2003 - 15:57 Der er 10 kommentarer og
2 løsninger

udtræk fra 2 tabeller

Hej Alle

Jeg søger én som lige kan bikse en stump kode sammen som gør følgende

tabel 1 = id, navn, navnid
tabel 2 = id, navn, navnid

indhold
tabel 1 = 1,per,11
tabel 1 = 2 hans, 100

tabel 2 = 1 per,11
tabel 2 = 2 per,11
tabel 2 = 3 per,11
tabel 2 = 4 hans,100


sammenlign navn og navnid fra de 2 tabeller

udskriv følgende på en side

nr navn antal
1  per  3
2 hans  1

hvor antal er  = det antal gange navnet og id'et optræder i tabel 2

Håber der er nogle som kan og vil hjælpe

Oraklet
Avatar billede dawin_dk Nybegynder
27. september 2003 - 16:49 #1
select tabel1.id,tabel1.navn,count(tabel2.id) from tabel1 inner left join tabel2 on tabel1.navnid=tabel2.navnid group by tabel1.id,tabel1.navn

det skulle gøre det... (måske har jeg lavet lidt fejl .. er ik testet.. men det er ca metoden)
Avatar billede dawin_dk Nybegynder
27. september 2003 - 16:50 #2
select tabel1.id,tabel1.navn,count(tabel2.id) from tabel1 left join tabel2 on tabel1.navnid=tabel2.navnid group by tabel1.id,tabel1.navn

var et inner der ik skal være der...
Avatar billede nielle Nybegynder
27. september 2003 - 16:56 #3
<%
SQL = "SELECT tabel1.id, navn, count(*) AS antal FROM tabel1, tabel2 WHERE tabel1.navn=tabel2.navn GROUP BY navn"
set rs = Conn.Execute(SQL) %>

<table border="1">
<tr>
<th>nr</th>
<th>navn</th>
<th>antal</th>
</tr>
<%
do while not rs.eof %>
<tr>
<td><% =rs("id") %></td>
<td><% =rs("navn") %></td>
<td><% =rs("antal") %></td>
</tr>
<%
  rs.MoveNext
loop %>
Avatar billede nielle Nybegynder
27. september 2003 - 17:05 #4
Eller denne her som er knap så effektiv som at bruge GROUP BY:

<%
SQL1 = "SELECT * FROM tabel1"
set rs1 = Conn.Execute(SQL1) %>
<table border="1">
<tr>
<th>id</th>
<th>navn</th>
<th>antal</th>
</tr>
<%
do while not rs1.eof
  SQL2 = "SELECT count(*) AS antal FROM tabel2 WHERE tabel2.navn='" & rs1("navn") & "'"
  set rs2 = Conn.Execute(SQL2) %>
<tr>
<td><% =rs1("id") %></td>
<td><% =rs1("navn") %></td>
<td><% =rs2("antal") %></td>
</tr>
<%
  rs1.MoveNext
loop
%>
</table>
Avatar billede nielle Nybegynder
27. september 2003 - 17:07 #5
Det kan måske være at du skal sammenligne på navnid (som i dawin_dk's løsning) i stedet for navn (som i mine løsninger).
Avatar billede orackel Nybegynder
27. september 2003 - 17:31 #6
Jeg tester lige jeres foreslag og så vender jeg tilbage

Oraklet
Avatar billede orackel Nybegynder
27. september 2003 - 17:43 #7
Jeg takker for den perfekte hjælp og vil give jer begge 2 de point jeg havde sat

begge løsninger virkede

Oraklet
Avatar billede orackel Nybegynder
27. september 2003 - 18:04 #8
Et lille spørgsmål mere
Nu har jeg sådan at jeg kan se hvor meget de har sendt til hinanden. men hvordan kan jeg gøre så jeg også kan se hvormeget de har modtaget ???


tabel 2
nr navn navnid,sendt,modtaget
1  per  11      3    1
2  hans  100    1    3

når jeg i min tabel har lavet følgende
tabel 1

nr  navn  afsenderid  modtagetid
1    per      11          100
2    per      11          100
3    per      11          100
4    hans    100        11

Så skulle der gerne stå

nr  navn  afsendt  modtaget
1    per    3        1
2    hans    1        3

Håber i lige vil klare den også :O)

Oraklet
Avatar billede nielle Nybegynder
27. september 2003 - 18:27 #9
Jeg forstå ikke rigtigt hvorfor at du har navnet i din tabel når du samtidigt har afsenderid. De to oplysninger svare jo til samme person, og den ene er altså overflødig (og tager bare plads op i databasen) - i databasesprog siger man at din database ikke er normaliseret.
Avatar billede nielle Nybegynder
27. september 2003 - 18:33 #10
Iøvrigt forstår jeg heller ikke hvorfor at du har både et id og et navneid i din tabel2 - det lader til at de begge to tjener det samme formål, nemlig at være et indeks for personen?
Avatar billede nielle Nybegynder
27. september 2003 - 18:38 #11
<%
SQL1 = "SELECT navn, navnid FROM tabel1"
set rs1 = Conn.Execute(SQL1) %>
<table border="1">
<tr>
<th>navneid</th>
<th>navn</th>
<th>afsendt</th>
<th>modtaget</th>
</tr>
<%
do while not rs1.eof
  SQL2a = "SELECT count(*) AS afsendt WHERE afsenderid=" & rs1("navnid")
  set rs2a = Conn.Execute(SQL2a)
 
  SQL2b = "SELECT count(*) AS modtaget WHERE modtagetid=" & rs1("navnid")
  set rs2b = Conn.Execute(SQL2b) %>
<tr>
<td><% =rs1("navnid") %></td>
<td><% =rs1("navn") %></td>
<td><% =rs2a("afsendt") %></td>
<td><% =rs2b("modtaget") %></td>
</tr>
<%
  rs1.MoveNext
loop %>
</table>
Avatar billede orackel Nybegynder
27. september 2003 - 19:26 #12
Tak det var lige hvad jeg skulle bruge :O)

Oraklet
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