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

Registros al Azar (Order by)

Estas en el tema de Registros al Azar (Order by) en el foro de ASP Clásico en Foros del Web. Es un vieja tema ya tratado muchas veces en el foro, pero en leí en uno de ellos la opción : select ...... order by ...
  #1 (permalink)  
Antiguo 17/02/2005, 09:52
 
Fecha de Ingreso: septiembre-2004
Mensajes: 26
Antigüedad: 19 años, 8 meses
Puntos: 0
Registros al Azar (Order by)

Es un vieja tema ya tratado muchas veces en el foro, pero en leí en uno de ellos la opción : select ...... order by rnd() y que solo funcionaba la primer vez. Así es pero por dos razones:
1.- pq eso te genera un valor aleatorio entre 0 y 1, y si ponemos un valor comprendido entre el 0 y el 1 en el order by siempre sale con el mismo orden.
2.- pq no habíamos generado la semilla. Antes hay que poner la instrucción: Randomize

luego al final debería de quedar algo como:
select .... order by "&int(rnd()*10)+1&"

Aún así, aunq las búsquedas deberían de ser aleatorias por completo a mí no me sucede, me explico, vale, las búsquedas al menos deberían de salir con una aleatoriedad del 10% (solo 10 tipo de secuencias aleatorias) pero a mí eso no me pasa, se repite demasiado las búsquedas, ¿alguna opinión?¿Alguna otra forma?

(la base es en access)

Última edición por jmonvic; 17/02/2005 a las 11:08
  #2 (permalink)  
Antiguo 17/02/2005, 10:11
 
Fecha de Ingreso: septiembre-2004
Mensajes: 26
Antigüedad: 19 años, 8 meses
Puntos: 0
También habría otra opción, que aunq no es al azar, azar...

intTotalRecords = RS.RecordCount
Randomize()
intRandomNumber = Int((intTotalRecords * Rnd))
RS.Move intRandomNumber

El problema aquí es que si tu búsqueda contiene 12 registros, una vez que empieces por el 7, te saldrá 7,8,9,...12 pero luego no empieza por el primero. ¿Hay alguna forma de que comience luego por el principio?
  #3 (permalink)  
Antiguo 17/02/2005, 10:22
Avatar de markshock  
Fecha de Ingreso: abril-2004
Ubicación: Allí, al fondo a la izqui
Mensajes: 316
Antigüedad: 20 años, 1 mes
Puntos: 0
A lo mejor esto soluciona vuestras dudas...

Código:
Randomize

SELECT count(id_reg) as total FROM tabla 

total_reg = rs("total").value

aleatorio = int(rnd()*total_reg)+1

x = 1
For x=1 to total_reg-1
 if not rs.eof then
   rs.movenext
 end if
Next
con esto que hacemos, cogemos el total de registros, a partir de este generamos un aleatorio y luego nos movemos con el recorset con el movenext hasta la posicion, si despues queremos volver a crear otro aleatorio solamente hemos de hacer otro Int((rnd()*total)+1) y un rs.movefirst, y volver ha hacer el for...

espero haber ayudado.
__________________
Señoooraaaa!! Que camisetas!!!

"Hay 10 tipos de personas, las que piensan en binario y las que no"
_________________________________
  #4 (permalink)  
Antiguo 17/02/2005, 11:08
 
Fecha de Ingreso: septiembre-2004
Mensajes: 26
Antigüedad: 19 años, 8 meses
Puntos: 0
Y es que a la par de esto se me presenta una pregunta: en realidad como funciona el order by?

Si hago una búsqueda que me devuelve varios registros si pongo un order by 3, con ello que indico, que empiece desde el 3er registro?
  #5 (permalink)  
Antiguo 17/02/2005, 11:15
Avatar de markshock  
Fecha de Ingreso: abril-2004
Ubicación: Allí, al fondo a la izqui
Mensajes: 316
Antigüedad: 20 años, 1 mes
Puntos: 0
el order by es para ordenar el resultado de la consulta por uno de los campos existente en ella..

digamos que si hago un "SELECT id,nombre,apellidos FROM agenda ORDER BY apellidos ASC"

esto me devuelve el ID, NOMBRE y APELLIDOS de AGENDA ordenados por APELLIDOS en orden ASCENDENTE.

entiendes?

Lee esto ya veras como te aclara muchas cosas:

http://www.maestrosdelweb.com/editorial/tutsql2/
__________________
Señoooraaaa!! Que camisetas!!!

"Hay 10 tipos de personas, las que piensan en binario y las que no"
_________________________________
  #6 (permalink)  
Antiguo 17/02/2005, 11:26
 
Fecha de Ingreso: septiembre-2004
Mensajes: 26
Antigüedad: 19 años, 8 meses
Puntos: 0
Muchas gracias markshock, pero ahí está la cuestión, si pones order by 5; 5 no es ninguna columno de la BBDD, entonces qué criterio sigue para ordenar los registros? (por la 5a columna de la bbdd quizas en orden asc por defecto?)
  #7 (permalink)  
Antiguo 17/02/2005, 11:30
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Me parece que SQl tiene una funcion NEWID que genera un id en memoria aleatoria precisamente, y me parece haberlo visto en el foro de bases de datos.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #8 (permalink)  
Antiguo 17/02/2005, 11:38
Avatar de markshock  
Fecha de Ingreso: abril-2004
Ubicación: Allí, al fondo a la izqui
Mensajes: 316
Antigüedad: 20 años, 1 mes
Puntos: 0
jmonvic, no lo he probado pero creo que si pones "order by 5" te dara error... ya que no sabe xq ordenarlo.
__________________
Señoooraaaa!! Que camisetas!!!

"Hay 10 tipos de personas, las que piensan en binario y las que no"
_________________________________
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

SíEste tema le ha gustado a 1 personas




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