---
title: "Spamtopplista - problem:("
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/10706-spamtopplista-problem"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Mr Nils"
published: "2001-07-20T16:48:00.000Z"
updated: "2001-07-21T17:45:00.000Z"
replies: 10
views: 262
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/10706-spamtopplista-problem"
---

# Spamtopplista - problem:(

## #1 — Mr Nils, 2001-07-20T16:48Z

Hejsan. Om ni har tid så vore set supernice om ni kollade denna.

När jag kör det lokalt så visar den en lista över alla användare, samt hur mycket som postat. När jag sen lägger upp den så verkar den få tuppjuck.

```
<% response.buffer = true %>
<!-- #include virtual="adovbs.inc" -->
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DSN=hmmm-k2;Password=@01#$fmlalalalanpdinindiljdeimhem"
Set RecSet = Server.CreateObject("ADODB.Recordset")
Set RecSet2 = Server.CreateObject("ADODB.Recordset")

Addera = "SELECT * FROM users" 
RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic

Do until RecSet.EOF

Addera2 = "SELECT * FROM forum where namn = '" & RecSet("name") & "'" 
RecSet2.Open Addera2, Connect, adOpenStatic, adLockOptimistic

Do until RecSet2.EOF
a=a+1
RecSet2.MoveNext
loop %>

<%=RecSet("name")%>: <%=a%><br>

<%
RecSet2.Close
RecSet.MoveNext
a=0
loop
RecSet.Close
Connect.Close 
%>
```

Det jag får ut när jag kör det på webhotellet är:

> Angels 82 posts and 5271 letters.
> Angels 82 posts and 5271 letters.
> Angels 82 posts and 5271 letters.
> Angels 82 posts and 5271 letters.
> Angels 82 posts and 5271 letters.
> Angels 82 posts and 5271 letters.
> Angels 82 posts and 5271 letters.
>
> Active Server Pages error 'ASP 0113' 
>
> Script timed out 
>
> /kdforum/postcomp.asp 
>
> The maximum amount of time for a script to execute was exceeded. You can change this limit by specifying a new value for the property Server.ScriptTimeOut or by changing the value in the ASP administration tools.

Skumt fel. :/

Permalänk: https://www.webforum.nu/p/10706

## #2 — PatrikB, 2001-07-20T18:09Z

Det tar för lång tid för skriptet att exekveras.

Det verkar som att den går in i en evighetsloop.

Hur många medlemmar är det som finns på forumet?

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/278256

## #3 — PatrikB, 2001-07-20T18:15Z

Testa denna kod:

```
<%
response.buffer = true

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DSN=hmmm-k2;Password=@01#$fmlalalalanpdinindiljdeimhem"
Set RecSet = Server.CreateObject("ADODB.Recordset")
Set RecSet2 = Server.CreateObject("ADODB.Recordset")
	Addera = "SELECT * FROM users" 
	RecSet.Open Addera, Connect, 0, 1
		strUser = RecSet("name")
		Do until RecSet.EOF
			Addera2 = "SELECT * FROM forum where namn = '" & strUser & "'" 
			RecSet2.Open Addera2, Connect, 3, 1
				a = RecSet2.RecordCount
				strName = RecSet("name")
			RecSet.Close
			Response.Write strName & ": a & "<br>"
			RecSet.MoveNext
		loop
	RecSet.Close
Set RecSet = Nothing
Connect.Close 
Set Connect = Nothing
%>
```

Skapa en ny fil och kör denna.
Återkom hur det går.

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/278257

## #4 — LarsG, 2001-07-20T19:03Z

Det verkar som om du vill räkna antal inlägg gjorda av alla personer. Det går bra att skriva som en select-fråga.

```
<%

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DSN=hmmm-k2;Password=@01#$fmlalalalanpdinindiljdeimhem"

sql = "select u.name,count(f.namn) as cnt from forum f right join users u on u.name = f.namn group by u.name "
RecSet = Connect.execute(SQL)

Do until RecSet.EOF
Response.Write recSet("name")  & ":" & RecSet("cnt")  & "<br>"           
RecSet.MoveNext
loop
RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing
%>
```

Permalänk: https://www.webforum.nu/p/278258

## #5 — Mr Nils, 2001-07-20T22:30Z

Patrik: Körde det, men det blev exakt samma sak. Användardatabasen har runt 20 användare.

LarsG: Hm, funkade inte. Den hävdar att EOF inte fick köras eller liknande. :/

Grejjen jag inte fattar är att den funkar perfekt lokalt, men hamnar i nån idiotloop när den ligger online. :/

Permalänk: https://www.webforum.nu/p/278259

## #6 — LarsG, 2001-07-21T11:31Z

Oj jag skrev lite fel i mitt inlägg.

```
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DSN=hmmm-k2;Password=@01#$fmlalalalanpdinindiljdeimhem"

sql = "select u.name,count(f.namn) as cnt from forum f right join users u on u.name = f.namn group by u.name "
[b]set[/b] RecSet = Connect.execute(SQL)

Do until RecSet.EOF
Response.Write recSet("name") & ":" & RecSet("cnt") & "<br>" 
RecSet.MoveNext
loop
RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing
%>
```

Permalänk: https://www.webforum.nu/p/278260

## #7 — Mr Nils, 2001-07-21T12:34Z

Ah, det funkade =) =)

Fast.. jag undrar fortfarande varför inte min kod fungerade. Kan det ha något att göra med att dom kör Chiliasp?

Eftersom jag är något av en novis när det gäller Sql frågor s vore det coolt om någon kunde förklara exakt vad den gör. :)

Permalänk: https://www.webforum.nu/p/278261

## #8 — PatrikB, 2001-07-21T16:47Z

Jepp,

chilliASP har inte fullt stöd för samma "komonenter"/object som en NT server.
Vill man, eller behöver man fullt stöd från tex ADODB.Recordset är det till att byta server till en IIS 4/5

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/278262

## #9 — LarsG, 2001-07-21T17:07Z

Dissektion av SQL-frågan 

1) 
from forum f right join users u on u.name = f.namn 

I och med att jag skriver right join så innebär det att man får alla rader i den högra tabellen oavsett om det finns någon matchande post i den vänstra tabellen. (Till skillnad från en vanlig join där man bara får de poster som matchar.) För de poster som inte matchar så fylls den vänstra tabellens kolumner med null-värden.

2) count(f.namn) ... group by u.name

Innebär att man grupperar ihop alla poster med samma värde i u.name. Då jag har en count med i select-listan så utförs den räkningen för varje grupp av namn. Det blir alltså en gång för varje post i users-tabellen.

3) count(f.namn)

Om en person inte finns med i forum-tabellen så kommer f.namn att vara null och om man gör count(columnnamn) så tas inte nullvärden med när man utför count. Det innebär att man får 0 i det fältet för alla som inte har gjort något inlägg. (Om jag hade skrivit count(\*) så skulle det ha blivit 1 där istället.)

Permalänk: https://www.webforum.nu/p/278263

## #10 — Mr Nils, 2001-07-21T17:13Z

Oh, lysande. :)

Kan passa på att ställa en fråga till när jag lix håller på.

Jag använde koden du postade, och gjorde så att den också räknade det totala antalet bokstäver som varje användare postat.

Finns det någon möjlighet att lägga in dessa i en array av något slag(?). Alltså.

Namn,poster,antalbokstäver

och då sortera efter ex antal bokstäver och på så sätt göra en topplista. (?)

Permalänk: https://www.webforum.nu/p/278264

## #11 — LarsG, 2001-07-21T17:45Z

Du kan lägga in allt i SQL-frågan.

Om kolumnen som innehåller inlägget heter post så kan man skriva 

```
sql = "select u.name,count(f.namn) as cnt,iif(post is null,0,sum(len(post))) as  totalLen from forum f right join users u on u.name = f.namn group by u.name order by 3 desc"
```

Den koden är Access-specifik, så om du har någon annan DBMS så får vi väl ta det då.

(Jag kan ju ta lite förklaringar på en gång.

1)
iif (post is null,0,sum(len(post)))

innebär att post är null så returneras 0 annars så summeras alla längder ihop

2)

order by 3 desc

innebär att resultat sorteras med avseende på 3:e kolumnen i select-listan och desc innebär att sortering sker i fallande ordning (Om man skriver ASC så blir det stigande.)
)

Permalänk: https://www.webforum.nu/p/278265

---

Tråden på webben: https://www.webforum.nu/amne/asp/10706-spamtopplista-problem
