Avatar billede thomas_regin Nybegynder
15. februar 2001 - 11:54 Der er 10 kommentarer og
2 løsninger

Do while not rs.eof - loop

Hejsa!

Jeg er desværre gået i selvsving i et endeløst loop, hvori jeg forgæves forsøger at flå håret af mig selv i ren og skær desperation. Kan du ikke lige hjælpe mig ud?

Mit problem er som følger:

Jeg har lavet en counter, hvori alle IP-adresser og referers bliver registreret. Problemet er, at når jeg viser statistikken fra Counteren, vil jeg kun vise hver IP-adresse én gang og hvilke referers der tilhører den IP-adresse. Men databasen er jo ligeglad. Den tager alle IP-adresserne og referers op. Det jeg har brug for, er en lille rutine, der f.eks hedder:

Hvis samme IP-adresse optræder mere end én gang i databasen, så sorter de andre fra og giv mig referers\'ne.

Er der nogen der lige kan udtænke en sådan statement?

På forhånd tak, og 100 points til et brugbart svar.

Med venlig hilsen

Thomas Regin.
Avatar billede kasseper Nybegynder
15. februar 2001 - 12:00 #1
Du kan lave en \'nem\' løsning, men som er noget resource krævende...Ja altså ikke helt vildt, men det virker :

SQL = \"select Distinct IPadresse from MyTabel\"
Set rs = MyConn.execute(SQL)
WHile rs.EOF

SQL = \"select referes from MyTable where IPadresse = \" & rs(\"IPadresse\")
set rs2 = MyConn.execute(SQL)
response.write \"Til IP adresse : \" & rs(\"IPadresse\") \"tilhøre flg. referes :<br>\"
while rs2.eof
response.write rs2(\"referes\") & \"<br>\"
rs2.movenext
wend
rs.movenext
wend
Avatar billede kasseper Nybegynder
15. februar 2001 - 12:07 #2
Men man kan vel også lave den sådan her :
SQL = \"select * from MyTabel\"
set rs = MyConn.execute(SQL)
dim gammel
gamme = \"\"
While rs.eof
if gammel <> rs(\"IPadresse\")then
gammel = rs(\"IPadresse\")
response.write \"IPadresse : \" & gammel & \" - Der til kommer flg. referes:<br>\"
response.write rs(\"referes\") & \"<br>\"
else
response.write rs(\"referes\") & \"<br>\"
end if
rs.movenext
wend
Avatar billede thomas_regin Nybegynder
15. februar 2001 - 12:15 #3
Hejsa Kasseper.

Tak for dine svar indtil videre. Jeg skal måske lige fortælle, at min database ser sådan her ud:

IP-Adresse  //  Referer
-------------------------
xxx.xxx.xxx      http://xxxxxxx

Dvs., at både IP og referer er i samme tabel. Med de forslag du har givet mig, har jeg ikke været istand til at sortere i identiske IP\'er.

Med venlig hilsen og indtil videre tak!.. :)

Thomas.
Avatar billede frank_jensen Nybegynder
15. februar 2001 - 12:22 #4
--> kasseper :
Din løsning vil blive turnet op til 400 %, hvis du husker den eneste grundlæggende regel i ASP : Ryd op efter dig selv....

Dvs. efter i slutningen af innerløkken, tilføjes der en Close() og en Set = Nothing...  Der vil gøre løsningen acceptabelt...

Og sætningen \"While rs.EOF\" skal nok rettes til \"While NOT rs.EOF\"
Avatar billede mmp Nybegynder
15. februar 2001 - 12:25 #5
For at gøre det nemt, kunne man jo også lade databasen gøre det for een i en forespørgsel. Var det ikke en idé ?
Avatar billede eagleeye Praktikant
15. februar 2001 - 12:27 #6
Prøv med denne SQL

SQL = \"SELECT * FROM tabel ORDER BY IPadresse\"
Avatar billede frank_jensen Nybegynder
15. februar 2001 - 12:27 #7
Prøv følgende :
***************************************
SQL = \"Select IP-Adresse form TABLE GROUP BY IP-Adresse\"
Set RS = DB.Execute(SQL)

WHILE NOT RS.EOF
  SQL2 = \"SELECT Referer FROM TABLE WHERE IP-Adresse = \'\" & RS(\"IP-Adresse\") & \"\';\"
  Set RS2 = DB.Execute(SQL2)
  Response.Write(\"<HR>TIl IPadresse\" & RS(\"IPAdresse\") & \" hører \")
  WHILE NOT RS2.EOF
      RESPONSE.WRITE(\"<BR>Referer\")
      RS2.MOVENEXT
  WEND
  RS2.Close
  Set RS2 = Nothing
WEND
RS.Close
Set RS = Nothing
Avatar billede thomas_regin Nybegynder
15. februar 2001 - 12:31 #8
Kasseper og Frank

Det virker!.. Hurra og mange tak!.. Jeg mærker pludseligt, hvordan jeg langsomt suges ud af mit loop. Svuuuup!..

Jeg har mest af alt lyst til at dele pointene imellem jer. Hvad siger i til 50/50?..

Thomas.

EagleEye: Med den Statement, vil jeg jo stadig få samtlige IP-adresser ud, og har ikke mulighed for at filtrere dem.

Mmp: Kom med et eksempel.. :)
Avatar billede eagleeye Praktikant
15. februar 2001 - 12:37 #9
Det jeg mente var, kasseper\'s svar med ændre SQL:

Men man kan vel også lave den sådan her :
SQL = \"SELECT * FROM tabel ORDER BY IPadresse\"
set rs = MyConn.execute(SQL)
dim gammel
gamme = \"\"
While rs.eof
if gammel <> rs(\"IPadresse\")then
gammel = rs(\"IPadresse\")
response.write \"IPadresse : \" & gammel & \" - Der til kommer flg. referes:<br>\"
response.write rs(\"referes\") & \"<br>\"
else
response.write rs(\"referes\") & \"<br>\"
end if
rs.movenext
wend
Avatar billede kasseper Nybegynder
15. februar 2001 - 12:48 #10
Ja det er fint.....med mig;)
Avatar billede kasseper Nybegynder
15. februar 2001 - 12:50 #11
frank_jensen >> Det var egentlig også mest for at skitsere, hvordan man kan dynamisk generere SQL sætninger og fyre dem af, under et loop. Jeg er helt enig med dig i at man altid skal holde styr på sit affald. Desvære har ASP ikke en \'affalds samling\' ;)
Avatar billede frank_jensen Nybegynder
15. februar 2001 - 12:59 #12
->kasseper : Den enste skaldespand i ASP er timeout på 3 sek....  det er noget shit hvis der er mere end et par rækker...  PÅ en rimelig heftig opdatering fik jeg process-time fra 5 minutter ned til 3 sekunder...
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