Foros del Web » Programando para Internet » ASP Clásico »

select y registros al azar

Estas en el tema de select y registros al azar en el foro de ASP Clásico en Foros del Web. Hola tengo una tabla con unos 70 registros .. y quiero mostrar esos registros pero no en orden ascendente ni descendente , los quiero mostrar ...
  #1 (permalink)  
Antiguo 26/08/2003, 20:30
 
Fecha de Ingreso: mayo-2001
Mensajes: 87
Antigüedad: 24 años
Puntos: 0
Pregunta select y registros al azar

Hola

tengo una tabla con unos 70 registros ..
y quiero mostrar esos registros pero no en orden ascendente ni descendente , los quiero mostrar al azar y la gracia es que no se repitan.

¿ se puede hacer por sql?

e intentado por la funcion rnd en asp pero los ejemplos que e visto me muestran solo un dato al azar.
  #2 (permalink)  
Antiguo 27/08/2003, 02:57
 
Fecha de Ingreso: mayo-2002
Mensajes: 66
Antigüedad: 23 años
Puntos: 0
Hola webpedaler:

Aquí te dejo una idea que creo que te ayudará:
a) Obtienes un recordset con todos los registros
b) Los pasas a un array con el método getRows() del recordset
c) Mientras uBound(array) sea > 0:
bucle:
d) Obtienes un número aleatorio entre 0 y uBound(array), por ejemplo j.
e) Muestras el elemento j-ésimo del array y lo borras
fin_bucle
__________________
Un saludo,

Alberto
  #3 (permalink)  
Antiguo 27/08/2003, 10:19
 
Fecha de Ingreso: mayo-2001
Mensajes: 87
Antigüedad: 24 años
Puntos: 0
gracias por la respuesta , voy a investigar el uso de getRows .

buscando en este mismo foro encontre que en mysql se puede hacer una consulta de esta manera:

SELECT * FROM mitabla ORDER BY RAND() LIMIT 70

y te despliega los registros al azar y sin repetir jaja, pero con access no funciona , aun no pruebo eso si con Sql server, la gracia seria poder hacer esto via ASP.
voy a intentar algo con lo que me propusiste , de todas maneras debo de estudiar bien el uso del getRows .
dejo abierta la duda de como hacer esto via asp, haber si alguien se anima.
  #4 (permalink)  
Antiguo 27/08/2003, 12:49
 
Fecha de Ingreso: mayo-2001
Mensajes: 87
Antigüedad: 24 años
Puntos: 0
ya aqui esta mi avanze


Código PHP:

<%

set objRS Server.CreateObject("ADODB.Recordset")

objRS.open "SELECT * FROM tabla"objCON
'set rs = oConn.Execute(SQL)
miTabla = objRS.GetRows
'
Liberamos los objetos ya!!
'objRS.Close
'
set objRS nothing
'objCON.Close
'
set objCON nothing
Response
.Write("<TABLE>")

'Recorremos el vector
'
Desde el primero hasta el último "registro"...
for 
0 to UBound(miTabla,2
    
'Abrimos una nueva fila
    
  Randomize Timer
  rndNumber = Int(RND * UBound(miTabla,2) )
    Response.Write("<TR>")
    '
Desde el primero hasta el último "campo"...
    for 
0 to Ubound(miTabla1)
        
'Imprimo una celda para cada campo
        '
Response.Write("<TD>" miTabla(JI) & "</TD>")
        
response.write("<td>"&miTabla(JrndNumber)&"</td>")
        
        
    
    
next
    Response
.Write("</TR>")
next
Response
.Write("</TABLE>")

%> 
muestro los registros al azar , el problema es que se repiten snifff
no se como borrar el registro que me mostro del arreglo
  #5 (permalink)  
Antiguo 28/08/2003, 08:49
 
Fecha de Ingreso: mayo-2002
Mensajes: 66
Antigüedad: 23 años
Puntos: 0
Hola otra vez:

El problema está en que tu forma de aleatorizar números devuelve números repetidos.

Te envío una modificación hecha a tu código que a primera vista funciona bien:
Código:
<% @LANGUAGE = "VBSCRIPT" %>
<%
'-----------------------------------------------------
dim objCon, dsn, objRS, numRegistros, numCampos, I
set objCon = Server.CreateObject("ADODB.Connection")
' dsn = <-- PON AQUÍ TU DSN O CADENA DE CONEXIÓN
set objRS = Server.CreateObject("ADODB.Recordset")
objCon.open dsn
randomize
'-----------------------------------------------------

objRS.open "SELECT * FROM tabla", objCON


' Cabecera de la tabla
Response.Write("<TABLE border=""1"">")
Response.Write("<TR>")
for each campo in objRS.fields
response.write("<td><b>" & campo.name & "</b></td>")
next
Response.Write("</TR>")

miTabla = objRS.GetRows
numCampos = uBound(miTabla, 1)
numRegistros = uBound(miTabla, 2)

'Liberamos los objetos ya!!
objRS.Close
set objRS = nothing
objCON.Close
set objCON = nothing


'Recorremos el vector
'Desde el primero hasta el último "registro"...
for I = 0 to numRegistros
  'Abrimos una nueva fila
  rndNumber = Int(RND * numRegistros)
'	response.write(rndNumber & "<br>")
	call imprimirRegistro(rndNumber, miTabla)
	call eliminarRegistro(rndNumber, miTabla, numRegistros)
next
Response.Write("</TABLE>")





sub imprimirRegistro(posicion, byRef laTabla)
dim J
    Response.Write("<TR>")
    'Desde el primero hasta el último "campo"...
    for J = 0 to numCampos
        'Imprimo una celda para cada campo
        'Response.Write("<TD>" & miTabla(J, I) & "</TD>")
        response.write("<td>" & miTabla(J, posicion) & "</td>")
    next
    Response.Write("</TR>")
end sub






sub eliminarRegistro(posicion, byRef laTabla, byRef numRegistros)
'----------------------------------------------------------------------------------------------
' Elimina un elemento del array y redimensiona éste.
'----------------------------------------------------------------------------------------------
dim z, k

'response.write(posicion & "...<br>")
'response.write(numRegistros & "...<br>")

' Creamos un array temporal que almacenará todos los registros posteriores al que vamos a eliminar
dim tamanyoArrayTmp
tamanyoArrayTmp = numRegistros - (posicion + 1)
'response.write(tamanyoArrayTmp & "...<br>")

dim arrayTmp()
redim arrayTmp(1, tamanyoArrayTmp)


' Copiamos todos los registros posteriores al eliminado
for z = (posicion + 1) to numRegistros
	for k = 0 to numCampos
		arrayTmp(k, (z - (posicion + 1))) = laTabla(k,z)
	next
next


' Actualizamos la cantidad de registros
numRegistros = numRegistros - 1


' Eliminamos todos los registros desde el eliminado hasta el final
redim preserve laTabla(1, posicion - 1)


' Añadimos al array original los registros restantes copiados en al array temporal
redim preserve laTabla (1, numRegistros)

for z = (posicion) to numRegistros
	for k = 0 to numCampos
		laTabla(k,z) = arrayTmp(k, (z - (posicion))) 
	next
next

end sub
%>
Ten en cuenta que no lo he depurado al 100% pero tras varias pruebas los resultados han sido buenos. Te aconsejo que lo pruebes y repruebes bien :)
__________________
Un saludo,

Alberto
  #6 (permalink)  
Antiguo 28/08/2003, 14:19
 
Fecha de Ingreso: mayo-2001
Mensajes: 87
Antigüedad: 24 años
Puntos: 0
De acuerdo

Nice

funciona bien , no lo probe mil veces , pero a primera vista funciono muy bien .
voy a estudiar bien ese sub para elimar del array , hay esta la magia .

muchas graciass por la gran ayuda.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:21.