Avatar billede lsolesen Nybegynder
03. marts 2002 - 16:58 Der er 13 kommentarer og
1 løsning

Problemer med sql

Hvorfor vælger nedenstående sql kun en post ud. Jeg har taget forespørgslen fra http://activedeveloper.dk/aspdigital/2002010201.asp, men har brug for tre tilfældige poster. Nedenstående vælger imidlertid kun en enkelt - og altid den samme? Det virker strålende, hvis jeg kun laver det med en post, som i eksemplet?

sql = "SELECT * FROM tbllinks WHERE ID = ("&_
    "SELECT Min(ID) FROM tbllinks WHERE ID >= (" &_
    "SELECT Round(CDbl(" & Replace(Rnd(),",",".") &_
    "*Max(ID))) FROM tbllinks)) or " &_
    "ID = ("&_
    "SELECT Min(ID) FROM tbllinks WHERE ID >= (" &_
    "SELECT Round(CDbl(" & Replace(Rnd(),",",".") &_
    "*Max(ID))) FROM tbllinks)) or " &_
    "ID = ("&_
    "SELECT Min(ID) FROM tbllinks WHERE ID >= (" &_
    "SELECT Round(CDbl(" & Replace(Rnd(),",",".") &_
    "*Max(ID))) FROM tbllinks))"

Med venlig hilsen
Lars Olesen
Avatar billede ncp Nybegynder
03. marts 2002 - 17:03 #1
jeg tror nok du skal resette rnd - kan ikke helt husk hvordan, men prøver lige at finde ud af det...
Avatar billede lsolesen Nybegynder
03. marts 2002 - 17:06 #2
ncp > Nej, Rnd() returnerer godt nok forskellige værdier. Har tjekket med response.write sql!
Avatar billede ncp Nybegynder
03. marts 2002 - 17:07 #3
Prøv med:
Randomize
sql = "SELECT * FROM tbllinks WHERE ID = ("&_
    "SELECT Min(ID) FROM tbllinks WHERE ID >= (" &_
    "SELECT Round(CDbl(" & Replace(Rnd(),",",".") &_
    "*Max(ID))) FROM tbllinks)) or " &_
    "ID = ("
Randomize
sql = sql & "SELECT Min(ID) FROM tbllinks WHERE ID >= (" &_
    "SELECT Round(CDbl(" & Replace(Rnd(),",",".") &_
    "*Max(ID))) FROM tbllinks)) or " &_
    "ID = ("
Randomize
sql = sql & "SELECT Min(ID) FROM tbllinks WHERE ID >= (" &_
    "SELECT Round(CDbl(" & Replace(Rnd(),",",".") &_
    "*Max(ID))) FROM tbllinks))"

så skulle de ikke blive ens!
Avatar billede lsolesen Nybegynder
03. marts 2002 - 17:20 #4
ncp > se på www.legestue.net i nederste højre hjørne, hvor jeg har lavet en response.write på sql'en. Værdierne er ikke ens. I øvrigt svinger det lidt, om der vælges en eller to poster, men selve sql-kaldet skulle vel netop gøre, at der altid vælges en post, som findes i databasen?
Avatar billede ncp Nybegynder
03. marts 2002 - 17:26 #5
den køere jo ud over bunden...
Avatar billede lsolesen Nybegynder
03. marts 2002 - 17:27 #6
Når der vælges to poster er den første post altid den samme, selvom der er forskellig Rnd(). Id'et går i øvrigt fra 923 til 975
Avatar billede lsolesen Nybegynder
03. marts 2002 - 17:28 #7
ncp > kører ud over bunden?
Avatar billede lsolesen Nybegynder
03. marts 2002 - 17:29 #8
ncp> jeg ved at den kører ud over bunden, men sql'en skulle vælge tre poster, og jeg har sat den til at skrive tre poster. Den finder imidlertid skiftevis kun en eller to poster på ovenstående sql, hvor den skal finde tre!
Avatar billede ncp Nybegynder
03. marts 2002 - 17:41 #9
og det skal være tilfælddige poster ikke ?
Avatar billede lsolesen Nybegynder
03. marts 2002 - 17:47 #10
Ja, de skal være tilfældige!
Avatar billede ncp Nybegynder
03. marts 2002 - 18:06 #11
men hvor har du så gjort af det stykker asp-kode som bestemmmer udfaldsvinklen af din rnd-funktion ???
Avatar billede lsolesen Nybegynder
03. marts 2002 - 19:09 #12
øh, udfaldsvinklen af rnd-funktionen?
Avatar billede coltau Juniormester
03. marts 2002 - 20:37 #13
Hvis du har huller i din ID-liste - hva' så. ?
Din SQL-sætning kan vælge flere ens poster - må den det. ?

Denne kode udvælger 2 helt tilfældige poster - den må du kunne udvide til 3:

<%
set RS = Server.CreateObject("ADODB.Recordset")
RS.CursorLocation = 3 ' adUseClient
RS.CursorType = 3 ' adOpenStatic
RS.Open "select * from tabel", Conn, , , &H0001 ' adCmdText

if not RS.EOF then
  randomize
  P1 = int(RS.RecordCount * rnd)
  RS.Move(P1)
  strNavn1 = RS("id")
  RS.MoveFirst
  do
    P2 = int(RS.RecordCount * rnd)
  loop until (P1 <> P2)
  RS.Move(P2)
  strNavn2 = RS("id")
  response.write("1=" & strNavn1 & "<br> 2=" & strNavn2)
end if
%>
Avatar billede lsolesen Nybegynder
03. marts 2002 - 21:07 #14
coltau > Fabelagtigt - det virker helt perfekt. Tak for hjælpen. Se www.legestue.net under sponsorer for at se scriptets output.
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