Avatar billede inkognito1 Nybegynder
15. juli 2002 - 19:37 Der er 61 kommentarer og
1 løsning

Sorter bagefter istedet for Order by on the fly.

Jeg henter en top 10 ud af min database på denne måde.
---------------
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open strDSN
strSQL = "SELECT top 10 count.site, Count(count.site) As taeler " & _
          "FROM count GROUP BY count.site order by taeler desc"
Set rs = myConn.Execute(strSQL)
---------------
De kommer fint i række følge. Men mit problem ligger i at jeg vil tage gennemsnittet af antal tilmeldte dage. Og så er det jo ikke sikkert at række følgen er den samme længere.

Kan jeg på en måde hente alle ud og derefter sætte dem i række følge. Eller vil det tage for lang tid.

Someone help me :o)
Avatar billede curriculum Nybegynder
16. juli 2002 - 04:03 #1
En løsing kunne være at bruge en array

Dim vaArray
vaArray = Array("første","anden", ...)

Så kunne du bruge en sortering bagefter .. men det her er kun et forslag
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 12:07 #2
Lyder som en fin idé.
Men hvordan sortere jeg dem bagefter ?
Avatar billede ras2000 Nybegynder
16. juli 2002 - 12:59 #3
Jeg forstår ikke helt hvad du vil. Vil du tage gennemsnittet af alle poster, eller bare de ti største? Jeg tror det ville være nemmest at tage to recordset ud, men jeg er ikke sikker på jeg har forstået det.
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 13:03 #4
Jeg vil tage gennemsinnet af alle poster men det er forskelligt hvor mange dage de har været tilmeldt.

Jeg vil tage gennemsnittet for de sidste 7 dage. Men det går galt hvis nu en side kun har været tilmeldt i 3 dage så skal det kun være gennemsnittet for 3 dage.

Sådan som jeg gør det får jeg de 10 største samlet ud .. det jeg skal bruge er de 10 største i gennemsnit. Ikke totalt.
Avatar billede ras2000 Nybegynder
16. juli 2002 - 13:10 #5
Altså du har x antal sider, som har været oppe i n antal dage. Så vil du have dem grupperet efter side, og fundet gennemsnittet af et eller andet, og finde de ti af dem der har det største gennemsnit?
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 13:13 #6
JA .. men bemærk at siderne har været tilmeldt i forskellige antal dage.
Avatar billede ras2000 Nybegynder
16. juli 2002 - 13:16 #7
Jepper, den er jeg med på. Antallet af dage, svarer det til antallet af poster for det pågældende site?
Avatar billede ras2000 Nybegynder
16. juli 2002 - 13:22 #8
Denne sql finder alle gennemsnit, og summer fra de forskellige sites. Hvis det kun skal være for de sidste 7 dage, skal du vist have en dato med ind i billedet, det ved jeg ikke om du har.
SELECT count.site, Avg(count.taeller) AS GennemsnitOftaeller, Sum(count.taeller) AS SumOftaeller
FROM count
GROUP BY count.site;
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 13:24 #9
Nej. For at skære det helt ud i pap :o)

Det er et statistik system hvor der tælles antal af hits. Det vil sige der en post for hver hit.

Posterne kan se sådan ud:

ID 1020 - HIT 1
ID 1020 - HIT 1
ID 1020 - HIT 1
ID 1010 - HIT 1
ID 1020 - HIT 1
ID 1010 - HIT 1
ID 1020 - HIT 1


Jeg henter så i en anden database dato for tilmeldingen. Udfra den kan jeg så afgøre hvad HIT tallet skal deles med. Og på den måde får jeg så gennemsnit pr dag.
Avatar billede ras2000 Nybegynder
16. juli 2002 - 13:25 #10
Du kan så smide denne her på for at sortere dem:
ORDER BY Sum(count.taeller) DESC;
Du skal vist skrive taeler de steder jeg har skrevet taeller, men ellers skulle det virke.
Avatar billede ras2000 Nybegynder
16. juli 2002 - 13:27 #11
Hm, lidt mere indviklet. Det vil sige du har to tabeller, en med alle hits'ene, og en med datoen for tilmeldingerne? Så skal du vel til at lave en inner join på de to tabeller, og lave noget sum, og gennemsnit på resultatet
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 13:29 #12
Jeg ved ikke måske virker det med gennemsnit ..
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 13:31 #13
Den kommer med en fejl:

strSQL = "SELECT count.site, Avg(count.taeler) AS GennemsnitOftaeler, Sum(count.taeler) AS SumOftaeler
FROM count GROUP BY count.site;"
Avatar billede ras2000 Nybegynder
16. juli 2002 - 13:34 #14
Du skal ikke have linieskift med inde.
strSQL = "SELECT count.site, Avg(count.taeler) AS GennemsnitOftaeler, Sum(count.taeler) AS SumOftaeler FROM count GROUP BY count.site;"
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 13:37 #15
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'taeler'.

/top20.asp, line 111
Avatar billede ras2000 Nybegynder
16. juli 2002 - 13:52 #16
Ok, jeg havde ikke læst din sql ordentlig, taeler er en du selv definerer.
, Count(count.site) As taeler .
Jeg er nød til at vide lidt mere om dine tabeller for at kunne hjælpe dig. Så vidt jeg har fostået, er der to tabeller, den ene indeholder noget ala
ID 1020 - HIT 1
ID 1020 - HIT 1
ID 1020 - HIT 1
ID 1010 - HIT 1
ID 1020 - HIT 1
ID 1010 - HIT 1
ID 1020 - HIT 1
Den anden indeholder start datoer. Prøv at fortælle mig hvad de to tabeller hedder, og hvad kolonnerne i hver af dem hedder og indeholder.
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 14:00 #17
Jeg har flere forskellige felter i databasen. Det er felter hvor der står inforamtioner om de forskellige brugere der har været inde på siderne.

Hver side har et id nr. eksempelvis 1020. Hver gang der kommer et jit kommer der så en ny record hvor feltet SITE bliver = id nr. 1020.

Det man skal gøre er vel at tælle antal SITE felter og derefter grupere dem.
strSQL = "SELECT count.site, Count(count.site) As taeler " & _
          "FROM count GROUP BY count.site order by taeler desc"

Der er et felt (reg) der ligeldes indeholder dato og tid for et hit. Det jeg har gjort for at hente kun 7 dage er sådan her.

strSQL = "SELECT count.site, Count(count.site) As taeler " & _
          "FROM count where reg > GETDATE()-7 GROUP BY count.site order by taeler desc"

Spørgsmålet er om der findes sådan en gennemsnit funktion eller om jeg skal over lave det i et array og på den måde få den rette rækkefølge.
Avatar billede ras2000 Nybegynder
16. juli 2002 - 14:08 #18
Du burde kunne lave det med sql, men jeg skal prøve mig frem med det, for at få det til at virke, jeg kan ikke lave det uden at have det i hånden. Om du laver det med et array, eller med et recordset, burde være ligegyldigt, du kan det samme med begge. Men igen, uden at se hvordan alle dataerne er sat sammen, er det svært for mig at hjælpe dig. Hvis du har lyst, kan du sende mig databasen på rasmus.bak.jepsen@teknologisk.dk, så kan jeg kigge på det.
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 14:39 #19
Access databse er sendt til dig på mail.
Avatar billede ras2000 Nybegynder
16. juli 2002 - 15:02 #20
Jep, jeg har fået den. Bare for at være helt sikre på at vi taler om det samme, så skal du:
have fat i de ti sites der har haft den største daglige gennemsnit, målt over en uge. Normalt kan det findes ved at dele det samlede antal hits de sidste syv dage, med 7, men hvis en af sitesene ikke har været tilmeldt i en hel uge, skal tallet deles med det antal dage, de har været tilmeldt, ikkesandt?
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 15:08 #21
Jo men det er ikke en must det er en top 10. Du kan abre lave den på alle.
Avatar billede ras2000 Nybegynder
16. juli 2002 - 16:01 #22
Nu har jeg da fundet dem frem, men jeg har lidt bøvl med at ordne dem. Du kan lige få hvad jeg har indtil videre, så prøver jeg at få dem ordnet.
sql = "SELECT Sum(count.site) AS SumOfsite, sites.tilmeld, count.site FROM count INNER JOIN sites ON count.site = sites.idnr WHERE (((count.reg)>Date()-7)) GROUP BY sites.tilmeld, count.site;"
rst.Open sql, Conn, 3, 3
%>
<table border="1" bordercolor="#000000" cellspacing="0" cellpadding="4">
    <tr>
        <td>sum</td>
        <td>tilm</td>
        <td>site</td>
        <td>gnmsnt</td>
    </tr>
<%
Do while not rst.eof
    response.write "<tr>"
    response.write "<td>" & rst(0) & "</td>"
    response.write "<td>" & rst(1) & "</td>"
    response.write "<td>" & rst(2) & "</td>"
    if date() - 7 > rst(1) then
        c = Round(rst(0)/7, 0)
    else
        c = Round(rst(0)/(date() - rst(1)), 0)
    end if
    response.write "<td>" & c & "</td>"
    response.write "</tr>"
    rst.movenext
loop
%>
</table>
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 16:13 #23
Hvordan connecter jeg den ?

strDSN = "DSN=SMS;uid=***;pwd=***;database=counter"
Set Conn = Server.CreateObject("ADODB.Connection")
sql = "SELECT Sum(count.site) AS SumOfsite, sites.tilmeld, count.site FROM count INNER JOIN sites ON count.site = sites.idnr WHERE (((count.reg)>Date()-7)) GROUP BY sites.tilmeld, count.site;"
rst.Open sql, Conn, 3, 3
Avatar billede ras2000 Nybegynder
16. juli 2002 - 16:18 #24
På samme måde som før.
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open strDSN
strSQL = "SELECT Sum(count.site) AS SumOfsite, sites.tilmeld, count.site FROM count INNER JOIN sites ON count.site = sites.idnr WHERE (((count.reg)>Date()-7)) GROUP BY sites.tilmeld, count.site;"
Set rs = myConn.Execute(strSQL)
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 16:23 #25
Dette er hele test siden:

<%

strDSN = "DSN=SMS;uid=***;pwd=***;database=counter"
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open strDSN
strSQL = "SELECT Sum(count.site) AS SumOfsite, sites.tilmeld, count.site FROM count INNER JOIN sites ON count.site = sites.idnr WHERE (((count.reg)>Date()-7)) GROUP BY sites.tilmeld, count.site;"
Set rs = myConn.Execute(strSQL)

%>
<table border="1" bordercolor="#000000" cellspacing="0" cellpadding="4">
    <tr>
        <td>sum</td>
        <td>tilm</td>
        <td>site</td>
        <td>gnmsnt</td>
    </tr>
<%
Do while not rst.eof
    response.write "<tr>"
    response.write "<td>" & rs(0) & "</td>"
    response.write "<td>" & rs(1) & "</td>"
    response.write "<td>" & rs(2) & "</td>"
    if date() - 7 > rst(1) then
        c = Round(rs(0)/7, 0)
    else
        c = Round(rs(0)/(date() - rs(1)), 0)
    end if
    response.write "<td>" & c & "</td>"
    response.write "</tr>"
    rst.movenext
loop
%>


DEN FÅR JEG EN INTERNAL ERROR PÅ
Avatar billede ras2000 Nybegynder
16. juli 2002 - 16:27 #26
Virkede den før?!
Avatar billede ras2000 Nybegynder
16. juli 2002 - 16:28 #27
Prøv lige med strSQL = "select * from count;"
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 16:30 #28
ja der er der kontakt
Avatar billede ras2000 Nybegynder
16. juli 2002 - 16:34 #29
Og den database du sendte mig er magen til den du selv sidder med?
Avatar billede ras2000 Nybegynder
16. juli 2002 - 16:35 #30
Prøv evt med
strSQL = "select * from sites;"
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 16:35 #31
Ved ikke om du lagde mærke til jeg skrev det var en MS SQL server den køre på. Måske ligger det der ..
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 16:39 #32
Har oprettet dig på servren .. så kan du teste direkte
<%
strDSN = "DSN=SMS;uid=Kaspers;pwd=test;database=counter"
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open strDSN
strSQL = "SELECT Sum(count.site) AS SumOfsite, sites.tilmeld, count.site FROM count INNER JOIN sites ON count.site = sites.idnr WHERE (((count.reg)>Date()-7)) GROUP BY sites.tilmeld, count.site;"

Set rs = myConn.Execute(strSQL)



%>
<table border="1" bordercolor="#000000" cellspacing="0" cellpadding="4">
    <tr>
        <td>sum</td>
        <td>tilm</td>
        <td>site</td>
        <td>gnmsnt</td>
    </tr>
<%
Do while not rs.eof
    response.write "<tr>"
    response.write "<td>" & rs(0) & "</td>"
    response.write "<td>" & rs(1) & "</td>"
    response.write "<td>" & rs(2) & "</td>"
    if date() - 7 > rs(1) then
        c = Round(rs(0)/7, 0)
    else
        c = Round(rs(0)/(date() - rs(1)), 0)
    end if
    response.write "<td>" & c & "</td>"
    response.write "</tr>"
    rs.movenext
loop
%>
</table>
Avatar billede ras2000 Nybegynder
16. juli 2002 - 16:43 #33
Æh, nej det kan jeg ikke. Jeg kan jo ikke få fat i din database, fra min computer. Hvis jeg laver et dokument, med det du skrev, får jeg en tom tabel
Avatar billede ras2000 Nybegynder
16. juli 2002 - 16:44 #34
Men det burde ikke have noget at skulle have sagt hvad slags server det er, hvis det er med sql-sætningen den er gal. Jeg vil skyde på at tabellen sites ligger et andet sted end tabellen count.
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 16:45 #35
<%
Set myConn = Server.CreateObject("ADODB.Connection")
myconn.Open("Provider=SQLOLEDB; Data Source=213.237.39.75; Initial Catalog=counter; User ID=Kaspers; Password=test;")
strSQL = "SELECT Sum(count.site) AS SumOfsite, sites.tilmeld, count.site FROM count INNER JOIN sites ON count.site = sites.idnr WHERE (((count.reg)>Date()-7)) GROUP BY sites.tilmeld, count.site;"

Set rs = myConn.Execute(strSQL)

%>
<table border="1" bordercolor="#000000" cellspacing="0" cellpadding="4">
    <tr>
        <td>sum</td>
        <td>tilm</td>
        <td>site</td>
        <td>gnmsnt</td>
    </tr>
<%
Do while not rs.eof
    response.write "<tr>"
    response.write "<td>" & rs(0) & "</td>"
    response.write "<td>" & rs(1) & "</td>"
    response.write "<td>" & rs(2) & "</td>"
    if date() - 7 > rs(1) then
        c = Round(rs(0)/7, 0)
    else
        c = Round(rs(0)/(date() - rs(1)), 0)
    end if
    response.write "<td>" & c & "</td>"
    response.write "</tr>"
    rs.movenext
loop
%>
</table>
Avatar billede inkognito1 Nybegynder
16. juli 2002 - 16:47 #36
count & sites ligger side om side i database !!!
Avatar billede ras2000 Nybegynder
16. juli 2002 - 16:53 #37
Jeg får denne fejl:
Error Type:
Microsoft OLE DB Provider for SQL Server (0x80004005)
[DBNMPNTW]Specified SQL server not found.
/eksperten/ny_side_1.asp, line 14
Avatar billede ras2000 Nybegynder
17. juli 2002 - 14:30 #38
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Ny side 1</title>
</head>

<body>

<%

Set myConn = Server.CreateObject("ADODB.Connection")
myconn.Open("Provider=SQLOLEDB; Data Source=213.237.39.75; Initial Catalog=counter; User ID=Kaspers; Password=test;")
strSQL = "SELECT site, tilmeld FROM count INNER JOIN sites ON count.site = sites.idnr ORDER BY count.site"

Set rs = myConn.Execute(strSQL)
site = ""
c = 0
do while not rs.eof
    if rs(0) <> site then
        c = c + 1
    end if
    rs.movenext
loop
rs.movefirst
redim tabel(c,3)
%>
<%
site = ""
c = 0
do while not rs.eof
    if rs(0) <> site then
        tabel(c, 0) = rs(0)
        tabel(c, 2) = rs(1)
        c = c + 1
        b = 0
    end if
    b = b + 1
    tabel(c-1,1) = b
    site = rs(0)
    rs.movenext
loop
for a = 0 to c
    if date() - tabel(a,2) > 7 then
        d = 7
    else
        d = Round(date() - tabel(a,2),0)
    end if
    if d = 0 then d = 1
    tabel(a,3) = tabel(a,1)/d
next
maxf = 100000
%>
<table border=1 bordercolor=#000000 cellspacing=0 cellpadding=4>
<%
for b = 0 to c
    max = 0
    maxn = 0
    for a = 0 to c
        if tabel(a,3) > max and maxf > tabel(a,3) then
            max = tabel(a,3)
            maxn = a
        end if
    next
    response.write "<tr><td>" & tabel(maxn,0) & "</td><td>" & tabel(maxn,3) & "</td><td>" & tabel(maxn,1) & "</td></tr>"
    maxf = max
next
%>
</table>
</body>
</html>
Avatar billede inkognito1 Nybegynder
17. juli 2002 - 17:52 #39
Den er en smule langsom når den hentes ind men ellers ok.

Men det undre mig at der er 3 records for meget med et id der har været der ..

Hvor er det det går galt ?
Avatar billede ras2000 Nybegynder
18. juli 2002 - 10:30 #40
Det er når der er to sites der har det samme antal hits. Det tager min løkke ikke højde for. Så fortsætter den til den næststørste, og springer dem der er ens over. Det kan godt undgås, men så går det endnu langsommere. I virkelighen vil det ikke ske særlig ofte, men jeg kan da godt lave noget der tager højde for det. Det ville nu være nemmere med en server der kunne klare lidt flere sql forespørgsler. SUM og AVG osv.
Avatar billede ras2000 Nybegynder
18. juli 2002 - 11:30 #41
Denne her tager højde for ens værdier.
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Ny side 1</title>
</head>

<body>

<%

Set myConn = Server.CreateObject("ADODB.Connection")
myconn.Open("Provider=SQLOLEDB; Data Source=213.237.39.75; Initial Catalog=counter; User ID=Kaspers; Password=test;")
strSQL = "SELECT site, tilmeld FROM count INNER JOIN sites ON count.site = sites.idnr ORDER BY count.site"

Set rs = myConn.Execute(strSQL)
site = ""
c = 0
do while not rs.eof
    if rs(0) <> site then
        c = c + 1
    end if
    rs.movenext
loop
rs.movefirst
redim tabel(c,3)
%>
<%
site = ""
c = 0
do while not rs.eof
    if rs(0) <> site then
        tabel(c, 0) = rs(0)
        tabel(c, 2) = rs(1)
        c = c + 1
        b = 0
    end if
    b = b + 1
    tabel(c-1,1) = b
    site = rs(0)
    rs.movenext
loop
for a = 0 to c
    if date() - tabel(a,2) > 7 then
        d = 7
    else
        d = Round(date() - tabel(a,2),0)
    end if
    if d = 0 then d = 1
    tabel(a,3) = tabel(a,1)/d
    response.write d
next
maxf = 100000
ens = 0
%>
<table border=1 bordercolor=#000000 cellspacing=0 cellpadding=4>
<%
for b = 0 to c - 1
    max = 0
    maxn = 0
    for a = 0 to c
        if tabel(a,3) > max and maxf > tabel(a,3) then
            max = tabel(a,3)
            maxn = a
        end if
        if tabel(a,3) = maxf and maxfn <> a then
            ens = ens + 1
            redim preserve nens(ens)
            nens(ens-1) = a
        end if
    next
    if ens > 0 then
        for e = 0 to ens-1
            response.write "<tr><td>" & tabel(nens(e),0) & "</td><td>" & tabel(nens(e),3) & "</td><td>" & tabel(nens(e),1) & "</td><td>" & ens & "</td></tr>"
            b = b + 1
        next
    end if
    response.write "<tr><td>" & tabel(maxn,0) & "</td><td>" & tabel(maxn,3) & "</td><td>" & tabel(maxn,1) & "</td><td>" & ens & "</td></tr>"
    ens = 0
    redim nens(0)
    maxf = max
    maxfn = maxn
next
%>
</table>
</body>
</html>
Avatar billede inkognito1 Nybegynder
18. juli 2002 - 17:33 #42
Det er acceptabelt ang. load tiden.... det eneste der mangler at mit paging system der ikke helt spiller sammen med det her.
Avatar billede inkognito1 Nybegynder
20. juli 2002 - 00:39 #43
Jeg har fundet en løsning på paging systemet. Men nu opstår det mærkeligste problem. Når antal af dage er et ulige tal eksempelvis 3 dage så går det helt galt. Det ser totalt mærkeligt ud. Hvad dælen kan være årsagen hertil ??? (Alt virker perfekt når det tal jer deler med er et lige tal eksempelvis 4)
Avatar billede inkognito1 Nybegynder
22. juli 2002 - 10:29 #44
Er du taget på ferie ? :O)
Avatar billede ras2000 Nybegynder
26. juli 2002 - 10:19 #45
Nej, jeg har ligget syg. Hvordan ser din kode ud nu? Har du et link til det?
Avatar billede inkognito1 Nybegynder
26. juli 2002 - 11:16 #46
Jammen prøv selv at sætte din kode ind og test den. Der kan du se det går galt.
Avatar billede ras2000 Nybegynder
26. juli 2002 - 11:30 #47
Jeg har siden med kode liggende her http://www.mucdesign.dk/eksperten/ny_side_1.asp
Hvad er det der ser mærkeligt ud? Det kommer da som det skal?
Avatar billede ras2000 Nybegynder
26. juli 2002 - 11:31 #48
7-tallene for oven var bare for at se hvor magne dage der var.
Avatar billede inkognito1 Nybegynder
26. juli 2002 - 11:33 #49
7019 fremkommer da alt for mange gange.
Avatar billede ras2000 Nybegynder
26. juli 2002 - 13:46 #50
Her er en der virker, men den laver altså sorteringen client-side, i javascript. Jeg fik svip af at sidde og prøve at programmere min egen sorterings function, din server time'ede ud hele tiden.
<html>

<head>
<%

Set myConn = Server.CreateObject("ADODB.Connection")
myconn.Open("Provider=SQLOLEDB; Data Source=213.237.39.75; Initial Catalog=counter; User ID=Kaspers; Password=test;")
strSQL = "SELECT site, tilmeld FROM count INNER JOIN sites ON count.site = sites.idnr ORDER BY count.site"

Set rs = myConn.Execute(strSQL)
site = ""
c = 0
do while not rs.eof
    if rs(0) <> site then
        c = c + 1
    end if
    rs.movenext
loop
rs.movefirst
redim tabel(c,3)
%>
<%
site = ""
c = 0
do while not rs.eof
    if rs(0) <> site then
        tabel(c, 0) = rs(0)
        tabel(c, 2) = rs(1)
        c = c + 1
        b = 0
    end if
    b = b + 1
    tabel(c-1,1) = b
    site = rs(0)
    rs.movenext
loop
for a = 0 to c
    if date() - tabel(a,2) > 7 then
        d = 7
    else
        d = Round(date() - tabel(a,2),1)
    end if
    if d = 0 then d = 1
    tabel(a,3) = tabel(a,1)/d
next
%>
<script type="text/javascript">
listen = new Array();
<% for a = 0 to c-1 %>
listen[listen.length] = new Array(<%=replace(tabel(a,3), ",", ".")%>,<%=replace(tabel(a,1), ",", ".")%>,'<%=replace(tabel(a,2), ",", ".")%>',<%=replace(tabel(a,0), ",", ".")%>);
<% next %>
function docompare(b,c){
    return b[0] - c[0];
}
function skriv(){
    a = listen.sort(docompare).reverse();
    str = "<table>";
    for (i = 0; i < listen.length; i++){
        str += "<tr><td>" + a[i][0] + "</td>";
        str += "<td>" + a[i][1] + "</td>";
        str += "<td>" + a[i][2] + "</td>";
        str += "<td>" + a[i][3] + "</td></tr>";
    }
    str += "</table>";
    document.all.her.innerHTML = str;
}
</script>
</head>

<body onload="skriv()">
<div id="her"></div>
</body>
</html>
Avatar billede inkognito1 Nybegynder
27. juli 2002 - 03:51 #51
Er det muligt at sætte det Array op i ASP istedet .. det er nemlig ikke muligt at bygge det ind i min ASP side, når det er lavet i Javascript.
Avatar billede ras2000 Nybegynder
29. juli 2002 - 09:47 #52
Det var det jeg prøvede før. Men din server understøtter ikke de funktioner, det var derfor jeg lavede det i javascript. Hvorfor virker det ikke i din asp side? Den jeg lavede her, har begge dele.
Avatar billede inkognito1 Nybegynder
29. juli 2002 - 12:57 #53
Det virker sådan set også .. men det går alt for langsomt ... det kan jeg ikke leve med ..
Avatar billede ras2000 Nybegynder
29. juli 2002 - 13:02 #54
Så må du vist få dig en anden server.
Avatar billede inkognito1 Nybegynder
29. juli 2002 - 13:06 #55
Jeg må lige hvad faen jeg gør ... tak for hjælpen indtil videre ..
Avatar billede ras2000 Nybegynder
29. juli 2002 - 16:34 #56
Det skal lige siges at det der tager tid er ikke javascript delen, men at hive al informationen ud af din server. Det kan du se ved at gemme den side der kommer frem lokalt, og så åbne den der, det går temmelig stærkt. Jeg ved ikke hvordan du havde tænkt dig at det skulle gå hurtigere end din server kan spytte tallene ud.
Avatar billede ras2000 Nybegynder
30. juli 2002 - 11:29 #57
OK, jeg kunne få det til at gå en del hurtigere ved at tænke mig lift om.
<html>

<head>
<%
Set myConn = Server.CreateObject("ADODB.Connection")
myconn.Open("Provider=SQLOLEDB; Data Source=213.237.39.75; Initial Catalog=counter; User ID=Kaspers; Password=test;")
strSQL = "SELECT count.site, Count(count.site) AS taeler, sites.tilmeld FROM sites INNER JOIN count ON sites.idnr = count.site GROUP BY count.site, sites.tilmeld;"
Set rs = myConn.Execute(strSQL)
%>

<script type="text/javascript">
listen = new Array();
<%
do while not rs.eof
    if date() - rs(2) > 7 then
        tid = 7
    else
        tid = date() - rs(2)
    end if
    if tid = 0 then tid = 1
    if rs(0) <> "" and rs(1) <> "" and rs(2) <> "" then
%>
listen[listen.length] = new Array(<%=Round(rs(1)/tid, 0)%>,<%=rs(0)%>,'<%=rs(2)%>',<%=rs(1)%>);
<%
    end if
    rs.movenext
loop
%>
function docompare(b,c){
    return b[0] - c[0];
}
function skriv(){
    a = listen.sort(docompare).reverse();
    str = "<table>";
    for (i = 0; i < listen.length; i++){
        str += "<tr><td>" + a[i][0] + "</td>";
        str += "<td>" + a[i][1] + "</td>";
        str += "<td>" + a[i][2] + "</td>";
        str += "<td>" + a[i][3] + "</td></tr>";
    }
    str += "</table>";
    document.all.her.innerHTML = str;
}
</script>
</head>

<body onload="skriv()">
<div id="her"></div>
</body>
</html>
Så får du det vist ikke bedre.
Avatar billede inkognito1 Nybegynder
30. juli 2002 - 22:21 #58
Det ser godt ud til at gå en del stærkere :o)

Hvordan henter jeg feltet sites.titel & sites.beskrivelse ud af databasen også ??
Avatar billede ras2000 Nybegynder
31. juli 2002 - 10:31 #59
Jeg mener at de skal skrives i SELECT count.site, sites.titel, sites.beskrivelse, ... OG i GROUP BY count.site, sites.titel, sites.beskrivelse, ..., men prøv dig lidt frem´.
Avatar billede inkognito1 Nybegynder
31. juli 2002 - 23:42 #60
En sidste ting hvis du har tid .. har du en genial løsning på et paging system .. evt. i javascript.
Avatar billede ras2000 Nybegynder
02. august 2002 - 14:10 #61
<html>

<head>
<%

Set myConn = Server.CreateObject("ADODB.Connection")
myconn.Open("Provider=SQLOLEDB; Data Source=213.237.39.75; Initial Catalog=counter; User ID=Kaspers; Password=test;")
strSQL = "SELECT site, tilmeld FROM count INNER JOIN sites ON count.site = sites.idnr ORDER BY count.site"

Set rs = myConn.Execute(strSQL)
site = ""
c = 0
do while not rs.eof
    if rs(0) <> site then
        c = c + 1
    end if
    rs.movenext
loop
rs.movefirst
redim tabel(c,3)
%>
<%
site = ""
c = 0
do while not rs.eof
    if rs(0) <> site then
        tabel(c, 0) = rs(0)
        tabel(c, 2) = rs(1)
        c = c + 1
        b = 0
    end if
    b = b + 1
    tabel(c-1,1) = b
    site = rs(0)
    rs.movenext
loop
for a = 0 to c
    if date() - tabel(a,2) > 7 then
        d = 7
    else
        d = Round(date() - tabel(a,2),1)
    end if
    if d = 0 then d = 1
    tabel(a,3) = tabel(a,1)/d
next
%>
<script type="text/javascript">
side = 0;
listen = new Array();
<% for a = 0 to c-1 %>
listen[listen.length] = new Array(<%=replace(tabel(a,3), ",", ".")%>,<%=replace(tabel(a,1), ",", ".")%>,'<%=replace(tabel(a,2), ",", ".")%>',<%=replace(tabel(a,0), ",", ".")%>);
<% next %>
function docompare(b,c){
    return b[0] - c[0];
}
antalposterpaaside = 10;
function skriv(n){
    a = listen.sort(docompare).reverse();
    side = n;
    if (side < 0) side = 0;
    fra = n * antalposterpaaside;
    til = (n+1) * antalposterpaaside;
    if (til > listen.length) til = listen.length;
    if (fra < 0) fra = 0;
    if (fra > listen.length - antalposterpaaside) fra = listen.length - antalposterpaaside;
    str = "<table>";
    alert(fra + " " + til);
    for (i = fra; i < til; i++){
        str += "<tr><td>" + a[i][0] + "</td>";
        str += "<td>" + a[i][1] + "</td>";
        str += "<td>" + a[i][2] + "</td>";
        str += "<td>" + a[i][3] + "</td></tr>";
    }
    str += "</table>";
    document.all.her.innerHTML = str;
}
</script>
</head>

<body onload="skriv(side)">
<div id="her"></div>
<input type="button" value="<<Forrige" onclick="skriv(1*side - 1)">&nbsp;
<input type="button" value="Næste>>" onclick="skriv(1*side + 1)">
</body>
</html>
Du skal ændre i antalposterpaaside for at angive hvor mange poster pr side der skal være.
Avatar billede ras2000 Nybegynder
02. august 2002 - 14:11 #62
...og slette linien     alert(fra + " " + til);
den var bare til at tjekke med.
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