Mr NilsMedlem sedan jan. 2000554 inlägg
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. :/
------------------
/Nils Wikberg
-"Law and order are for weak minds. Chaos requires management.
[Redigerat av Mr Nils den 20 jul 2001]
PatrikBMedlem sedan mars 20002 713 inlägg
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
------------------
*Det tar sig sa han som hade eld i håret*
PatrikBMedlem sedan mars 20002 713 inlägg
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
------------------
*Det tar sig sa han som hade eld i håret*
[Redigerat av PatrikB den 20 jul 2001]
LarsGMedlem sedan dec. 200012 465 inlägg
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
%>
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 20 jul 2001]
Mr NilsMedlem sedan jan. 2000554 inlägg
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. :/
------------------
/Nils Wikberg
-"Law and order are for weak minds. Chaos requires management.
LarsGMedlem sedan dec. 200012 465 inlägg
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
%>
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 21 jul 2001]
Mr NilsMedlem sedan jan. 2000554 inlägg
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. :)
------------------
/Nils Wikberg
-"Law and order are for weak minds. Chaos requires management.
[Redigerat av Mr Nils den 21 jul 2001]
PatrikBMedlem sedan mars 20002 713 inlägg
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
------------------
*Det tar sig sa han som hade eld i håret*
LarsGMedlem sedan dec. 200012 465 inlägg
Dissektion av SQL-frågan
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.
- 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.
- 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.)
------------------
essentitia preter non sans multiplicandum
Mr NilsMedlem sedan jan. 2000554 inlägg
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. (?)
------------------
/Nils Wikberg
-"Law and order are for weak minds. Chaos requires management.
LarsGMedlem sedan dec. 200012 465 inlägg
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.
iif (post is null,0,sum(len(post)))
innebär att post är null så returneras 0 annars så summeras alla längder ihop
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.)
)
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 21 jul 2001]