webForumDet fria alternativet

Randomize från databas > hål i ID

ASPur ASP

8 svar · 377 visningar · startad av roady

roadyMedlem sedan jan. 2002473 inlägg
#1

jag har kollat runt på en massa slumpningar, men mitt problem är att folk kan lägga till och ta bort posterna i databasen, därför blir det "hål" i räknaren i databasen.

typ:
1
2
5
6
7
10
13
14
osv....

hur fixar man en slumpning som funkar på det ? :q
behöver bara ha ut ett värde!

crisse6Medlem sedan dec. 20002 526 inlägg
#2

vad menar du? Den slumpar ju bara fran dom som finns.... vanta ska ge dig exempel pa slumpning fran db... ;)

crisse6Medlem sedan dec. 20002 526 inlägg
#3

kolla denna sida... mycket bra kod av LarsG, slumpar iofs 5, men latt att andra, skriv om du far problem ;)

http://www.webforum.nu/showthread.php?s=&postid=86465#post86465

MacceMedlem sedan apr. 2001425 inlägg
#4

Varför slumpa ? Det är väl bättre att du bygger en loop
som går igenom en getrows-array och väljer det lägsta lediga
id:t och gör en insert där.

Av vilken anledning vill du få bort "hålen" i db:n ?

mvh

OveRRidEMedlem sedan feb. 200112 078 inlägg
#5

Av vilken anledning vill du få bort "hålen" i db:n ?

Ja?

PatrikBMedlem sedan mars 20002 836 inlägg
#6

detta är ett annat sätt:

<%
Option Explicit

Dim strSQLrnd
Dim rstRand
Dim intTotalRecs
Dim intRndPost
Dim strSlumpPost

'## -- nytt frö för slumpning --
Randomize

'## -- sql-fråga att slumpa från --
strSQLrnd = "SELECT * FROM tbl_table"

'## -- skapa recordset som ska hålla posterna att slumpa från --
Set rstRand = Server.CreateObject("ADODB.Recordset")

	With rstRand
		.Source = strSQLrnd
		.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/db/my_db.mdb")
		.CursorLocation = 3
		.CursorType = 1
		.LockType = 3
		.Open
		.ActiveConnection = Nothing
		
		If Not .EOF Then
			intTotalRecs = .RecordCount
			intRndPost = CInt(rnd*(intTotalRecs - 1))

			'## -- förflytta recordset markören till slumpat värde --
			.Move intRndPost
			
			'## -- spara det slumpade värdet till variabel --
			strSlumpPost = .Fields(0).Value
		Else
			'## -- inga poster fanns --
		End if
		
		'## -- stäng recordsetet --
		.Close
	End With
	
'## -- clean up minnet --
Set rstRand = Nothing
%>
<html>
<head>
<title>Slumpa från DB</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<%
	Response.Write "Antal poster: " & intTotalRecs & _
		"<br>Slumpvärde: " & intRndPost & _
		"<br>Slumpat ID: " & strSlumpPost
%>
</body>
</html>

ändra sövägen till databasen och sql-frågan så att det stämmer för din db

cya,
PatrikB

roadyMedlem sedan jan. 2002473 inlägg
#7

jag har inte riktigt greppat detdär med slumpningen, när jag själv gjort så får jag en massa ID:s som inte finns. Det var därför jag talade om dessa "hål", inget som jag ville ta bort utan de finns ju bara där ;)

Men nu funkar det kanon ju! Får bara nummer som existerar i databasen.
tack för den eminenta hjälpen :bire

danisMedlem sedan aug. 2002157 inlägg
#8

det är bättre att slumpa direkt från databasen. mkt enklare

@ndersMedlem sedan juni 200032 969 inlägg
#9

Om det är enklare att slumpa direkt från databasen skulle det uppskattas med kodexempel. I MySQL kan man enkelt göra det, men i andra dbms?

134 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)