Avatar billede voller Nybegynder
02. januar 2003 - 13:13 Der er 5 kommentarer og
1 løsning

SQL statements

Hej Eksperter.

Jeg sidder og bakser et forum sammen i ASP. På forumets forside vil jeg selvfølgelig gerne have en oversigt over alle de emner der er skrevet om, men jeg vil også gerne have vist hvor mange svar, der er på et givet emne.

Indtil videre har jeg gjort som følger:

*DB forbindelse*
*Hent de ti nyeste emner. SQL 1.*
Set rs = Conn.Execute("SELECT TOP 10 * FROM log ORDER BY Id DESC")

*Bearbejd data fra RS.*
if (rs.BOF or rs.EOF) then
    Blablabla
Else
Do While Not rs.EOF
  Response.Write(*Udskriv liste over emner*)
  *Hent antallet af svar på det emne der behandles nu. SQL 2.*
  Set recordCount = Conn.Execute("Select Count(*) As ItemCount From comment
Where newsid = '" & rs("Id") & "'")
    *Arbejd med SQL 2.*
    if recordCount("ItemCount") = 1 then
        Response.Write("Et svar")
    Else
        Response.Write(recordCount("ItemCount") & " antal svar")
  End if
  rs.MoveNext
Loop
End if
*Luk DB forbindelse, recordsets og alt det der...*

En ret enkel måde at gøre det på, men der kommer jo en f... masse kald til databasen. Det har jeg fået at vide fra en ven, at man kan undgå. Noget med at kombinere de to SQL statements. Hvem kan hjælpe mig med det? Har prøvet noget med INNER JOIN med det bliver noget rod (når jeg prøver).


Mvh Voller.
Avatar billede _just4fun_ Nybegynder
02. januar 2003 - 13:45 #1
Nu ved jeg ikke rigtig hvad dine kolonner hedder da du bruger select * (fyyy...) men ellers er SQL- syntaxen:
SELECT TOP 10 count(*) as ItemCount, Id, Emne FROM log
Group by Id, Emne
ORDER BY Id DESC
Avatar billede voller Nybegynder
02. januar 2003 - 14:12 #2
Jeg tror du har misforstået.

I en tabel i min database har jeg en masse indlæg liggende (log). I en anden tabel i min database har jeg svarene liggende (comment). Jeg vil gerne have en oversigt over emnerne, taget fra tabel et. Efter den oversigt vil jeg gerne talt hvor mange svar der er på pågældende indlæg.

Kan alt det ordnes med ét SQL statement?
Avatar billede voller Nybegynder
02. januar 2003 - 14:14 #3
Bortset fra det hedder mine kollonner i log Id, Dag, Tid, Overskrift og Tekst, men jeg skal bruge indholdet af alle kollonner, så jeg henter dem alle med * i stedet for at nævne dem med deres titel.
Avatar billede hossein Nybegynder
02. januar 2003 - 14:29 #4
skal du ikke joine 2 tabeller? hvordan er den anden tabel, hvad hedder felterne, og med hvilket felt kan man joine dem?
Avatar billede _just4fun_ Nybegynder
02. januar 2003 - 14:35 #5
nååja, det kan da egentlig godt se når du lige nævner det!
Men ja, den er ikke særlig anderledes:
SELECT TOP 10 count(comment.newsID) as ItemCount, log.* Emne FROM log
inner join Comment on comment.newsID = log.ID
Group by comment.newsID, log.Id, log.Dag, log.Tid, log.Overskrift, log.Tekst
ORDER BY log.Id DESC

Hvis du bruger left outer join frem for inner join får du også de emner der ikke er kommentarer på...

.. bemærk at alle de felter du vil have med ud i forespørgslen skal angives i Group By..
Avatar billede voller Nybegynder
02. januar 2003 - 16:31 #6
Jeg rodede lidt frem og tilbage med det og kom frem med noget, der virkede:
SELECT TOP 10 count(comment.newsID) as ItemCount, log.Id, log.Dag, log.Tid, log.Overskrift, log.Tekst FROM log LEFT OUTER JOIN comment ON comment.newsID = log.ID GROUP BY comment.newsID, log.Id, log.Dag, log.Tid, log.Overskrift, log.Tekst ORDER BY log.Id DESC

Tak for hjælpen.
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