[ASP & SQL] Drie willekeurige unieke records ophalen

Pagina: 1
Acties:

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 20-05 01:33
Ik heb een ASP applicatie met een Access database.
Ik wil graag random altijd 3 records uit een tabel halen, maar ze mogen in die 3 keer maar maximaal 1 keer voorkomen.

Met 1 random record lukt het wel, nl:

Heb de search en Google al gebruikt maar meeste voorbeelden op internet gaan uit van 1 random record.

Hoe kan ik dus 3 unieke random records ophalen?

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Set RS = Server.CreateObject("ADODB.Recordset")
sqlString = "SELECT Nieuws.* FROM Nieuws"
RS.Open sqlString, Conn, adOpenKeyset, adLockReadOnly
If Not RS.EOF Then

        
  Dim rndMax
  Dim rndNumber
  rndMax = CInt(RS.RecordCount)
  RS.MoveFirst

  Randomize
  rndNumber1 = Int(Rnd * rndMax)
  RS.Move rndNumber31
  Response.Write "ID: " & RS("nieuws_id") & "<br>"
 End If
RS.Close
Set RS = nothing

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Voeg een kolom toe, zet hier een random nummer in en sorteer op deze kolom.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 20-05 01:33
gorgi_19 schreef op 22 juni 2004 @ 19:08:
Voeg een kolom toe, zet hier een random nummer in en sorteer op deze kolom.
Je bedoelt een kolom toevoegen in de array waarin ik de records ophaal uit de DB?
En hoe kan ik trouwens een array sorteren?

[ Voor 8% gewijzigd door Urk op 22-06-2004 19:15 ]


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 20-05 01:33
Hmmmm...het blijkt dat ik niet de enige ben met dit probleem, er is ook niet echt een simpele oplossing voor als ik zo doorGoogle...
Dit is wat ik nu heb, en het WERKT! Wellicht is het niet de beste methode dus jullie commentaar of suggesties en verbeteringen zijn nog steeds welkom!! -->

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<%     
    'Met het onderstaande blok kan krijg je het aantal rijen in de tabel terug 
    Set GetRandom= Conn.Execute("Select Count(*) From Nieuws") 
        intRandomCount= GetRandom(0) 
    Set GetRandom= Nothing 
     
    randomize 'dit "voorkomt" dat er 2x achter elkaar het zelfde resultaat gegeven word 
    intRandomNr= int(rnd * intRandomCount) + 1 'kies een random nummer wat een nummer terug geeft tussen 1 en het aantal rijen dat je in je table hebt 
     
    'Met de onderstaande code 
     Set RS = Server.CreateObject("ADODB.Recordset")
     sqlString = "SELECT nieuws_id FROM (SELECT TOP 1 * FROM (SELECT TOP " & intRandomNr & " * FROM Nieuws)ORDER BY nieuws_id DESC)"
     Response.Write sqlString & "<br>"
     RS.Open sqlString, Conn
     If Not RS.EOF Then
      eersteid = RS("nieuws_id")
      Response.Write RS("nieuws_id") & "<br>"
     End If
     RS.Close
     Set RS = nothing

    Randomize 'dit "voorkomt" dat er 2x achter elkaar het zelfde resultaat gegeven word 
    intRandomNr= int(rnd * intRandomCount) + 1 'kies een random nummer wat een nummer terug geeft tussen 1 en het aantal rijen dat je in je table hebt
     
    'Met de onderstaande code 
     Set RS = Server.CreateObject("ADODB.Recordset")
     sqlString = "SELECT nieuws_id FROM (SELECT TOP 1 * FROM (SELECT TOP " & intRandomNr & " * FROM Nieuws WHERE Not nieuws_id = " & eersteid & ")ORDER BY nieuws_id DESC)"
     Response.Write sqlString & "<br>"
     RS.Open sqlString, Conn
     While Not RS.EOF
      tweedeid = RS("nieuws_id")
      Response.Write RS("nieuws_id") & "<br>"
     RS.MoveNext
     Wend
     RS.Close
     Set RS = nothing

    Randomize 'dit "voorkomt" dat er 2x achter elkaar het zelfde resultaat gegeven word 
    intRandomNr= int(rnd * intRandomCount) + 1 'kies een random nummer wat een nummer terug geeft tussen 1 en het aantal rijen dat je in je table hebt
     
    'Met de onderstaande code 
     Set RS = Server.CreateObject("ADODB.Recordset")
     sqlString = "SELECT nieuws_id FROM (SELECT TOP 1 * FROM (SELECT TOP " & intRandomNr & " * FROM Nieuws WHERE Not nieuws_id = " & eersteid & " AND Not nieuws_id = " & tweedeid & ")ORDER BY nieuws_id DESC)"
     Response.Write sqlString & "<br>"
     RS.Open sqlString, Conn
     While Not RS.EOF
      Response.Write RS("nieuws_id") & "<br>"
     RS.MoveNext
     Wend
     RS.Close
     Set RS = nothing
%>

Verwijderd

gorgi_19 schreef op 22 juni 2004 @ 19:08:
Voeg een kolom toe, zet hier een random nummer in en sorteer op deze kolom.
zo heb ik het gedaan voor een online loterij, maar de TS wil bv. op een homepage elke keer 3 andere nieuwsitems laten zien

Verwijderd

Wat je ook zou kunnen doen, ik weet niet om hoeveel records het gaat, maar als je alle nieuwsid's opslaat in een array (eventueel even in application cache opslaan en deze bewerken als nieuws bewerkt wordt voor snelheid)

pik nu 3x een random nummertje tussen de 0 (of is 1e item in array in VBS nu 1....) en de upperbound van je array. dat zijn dan je nieuwsID's

ook kan je 3x willekeurig een nummer tussen je laagste en hoogste nieuwsid trekken en kijken of die in database nog voorkomt, zo ja. noteren, anders omnieuw trekken
Pagina: 1