Avatar billede koolind Nybegynder
13. marts 2008 - 19:34 Der er 17 kommentarer og
1 løsning

skriv nye tilfældige id numre i min database. problemer med loop!

Jeg er ved at prøve at få mit kode til at virke, og er desværre ingen haj til asp.. eller anden programmering for den sags skyld.. men har en ting som jeg skal have lavet alligevel jo :D

Jeg har en database med en række varer som skal vises på en side på samme måde hver gang.. MEN.. en gang imellem skal alle varer kunne blandes... min tanke var at lave et script som gik ind og hentede id og skrev en tilfældig værdi til "nyid" (som jeg har oprettet til lejligheden) og så sortere på nyid på mit site..

lige nu indlæser jeg data og "order by rand".. altså blander dem ved indlæsningen (omend jeg godt ved at det ikk er 1000% tilfældigt.. men det er fint nok) og dernæst i et loop skriver et nummer som er i en variabel for til sidst at addere variablen med 1...
problemet opstår i at mit script skriver den "endelige" værdi af min nummer-variabel ud til alle mine rækker i tabellen, hvilket jo ikke var meningen.. hvorfor gør den dette, og hvordan kan jeg løse det ??

Har prøvet at flytte rundt på tingene osv osv.. men uden held.. samme resultat eller blot fejlmeldninger..

Her er min kode...

<%
dim rs, sql, sqlupdate, nummer
set rs = server.createobject("adodb.recordset")
sql = "SELECT * FROM tabelnavn ORDER BY RAND()"
rs.open sql,cn,0,1,1
%>
  <%
do until rs.eof
%>
<%
nummer=nummer+1
sqlupdate = "update tabelnavn SET nyid=" & nummer
cn.Execute(sqlupdate)
%>
  <%
rs.movenext
loop
%> 
  <%
rs.close
set rs = Nothing
%> 


Håber nogle kan finde problemet og forhåbentligt en løsning ?
Avatar billede nielle Nybegynder
13. marts 2008 - 19:40 #1
Kan du ikke opnø samme effekt med at kalde denne ene SQL:

UPDATE tabelnavn SET nyid = Rand()
Avatar billede nielle Nybegynder
13. marts 2008 - 19:48 #2
I øvrigt opstår dit prorblem at denne sætning:

sqlupdate = "update tabelnavn SET nyid=" & nummer

sætter værdien på samtlige rækker. Hvis det kun var enkelt række der skulle opdateres, så skal du tilføje en where som udpeger den:

sqlupdate = "update tabelnavn SET nyid=" & nummer & " where id = XXX"
Avatar billede koolind Nybegynder
13. marts 2008 - 19:51 #3
fantastisk.. og havde ellers prøvet med noget meget tæt derpå.. men der ville det ikke lige spille.. quick fix.. det kan vi li.. heh..
men til problemet.. hvis jeg brugte en where, ville jeg jo ikke få opdateret dem alle, ville jeg ?
Avatar billede nielle Nybegynder
13. marts 2008 - 19:53 #4
Det ville Do-løkken jo så sørge for at du fik.
Avatar billede koolind Nybegynder
13. marts 2008 - 19:57 #5
jamen hvad skulle den så havde heddet ? where id = ??? det rækker udover min forstand tilsyneladende.. :D
Avatar billede nielle Nybegynder
13. marts 2008 - 19:58 #6
Hvilke felter har du i din tabel?
Avatar billede koolind Nybegynder
13. marts 2008 - 20:03 #7
Hvilke felter.. Hvorledes menes med hvilke felter ?

og btw.. nu kører det ellers, sidste lille detalje blev fikset ved mit site.. skønt.. :) så er det hele køreklart..
Avatar billede nielle Nybegynder
13. marts 2008 - 20:07 #8
Din tabel består af nogle felter - nyid er et af dem. Jeg skal vide om du også har et felt som hedder id?
Avatar billede koolind Nybegynder
13. marts 2008 - 20:12 #9
har både et id og et nyid.. og så en række andre oplysninger også self..

hvis ikke jeg havde et id udover nyid som får det tilfældige nummer, ville jeg formentligt få et problem hvis rand genererede to ens numre som skulle være unikke og så ikke blev det..
Avatar billede nielle Nybegynder
13. marts 2008 - 20:18 #10
Hvid du har et ifd-felt, så kunne det f.eks. være gjort sådan:

<%
dim rs, sql, sqlupdate, nummer
set rs = server.createobject("adodb.recordset")
sql = "SELECT * FROM tabelnavn ORDER BY RAND()"
rs.open sql,cn,0,1,1

nummer = 0
do until rs.eof
    nummer = nummer + 1
    sqlupdate = "update tabelnavn SET nyid = " & nummer & " where id = " & rs("id")
    cn.Execute(sqlupdate)

    rs.movenext
loop

rs.close
set rs = Nothing
%>

> hvis ikke jeg havde et id udover nyid som får det tilfældige nummer, ville jeg formentligt få et problem hvis rand genererede to ens numre som skulle være unikke og så ikke blev det..

Hvis vi lige ser bort fra det meget usandsynlige at dette ville ske ... hvorfor ville det være et problem?
Avatar billede koolind Nybegynder
13. marts 2008 - 20:31 #11
der skal vel være en unik primary key i ens tabel såvidt jeg har forstået ?

og det samme prøvede jeg faktisk også.. jeg brugte dog rs.fields("id") i stedet.. det er vist hvad det hedder når jeg har haft kaldt data frem andre gange på de resterende sider...
Det er ikke let at vide præcist hvilken syntaks man skal bruge, når man famler halvejs i blinde.. ved godt hvad det er jeg vil og hvordan.. men præcist hvordan man skriver det er lidt tricky.. :/

men jeg siger 1000 tak for hjælpen :)

hvordan stikker jeg dig nogle point ? skal du ikke komme med et svar først så ? (nu dine andre indlæg her står som kommentarer)
Avatar billede nielle Nybegynder
13. marts 2008 - 20:33 #12
Din nyid er vel ikke en primary key?
Avatar billede koolind Nybegynder
13. marts 2008 - 20:37 #13
nej id er primary key.. men min pointe var at hvis jeg kun havde id, som jeg updatede og så fik to ens tal, ville det give et problem da den er primary key..
Avatar billede nielle Nybegynder
13. marts 2008 - 20:43 #14
En primary key er ikke absolut nødvendig, men ja det er en godt ide at bruge et andet felt end id til at sortere efter. :^)
Avatar billede nielle Nybegynder
24. marts 2008 - 23:10 #15
Er du kommet vidre med denne her?
Avatar billede nielle Nybegynder
31. marts 2008 - 18:41 #16
??
Avatar billede koolind Nybegynder
31. marts 2008 - 21:25 #17
jo som skrevet tidligere, virkede det, og problemet er løst :)
Avatar billede nielle Nybegynder
31. marts 2008 - 22:11 #18
Jamen, så mangler du vel bare at acceptere mit svar :^)
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