La consulta es:
Código PHP:
sql="Select * from mitabla order by rnd(id_mitabla)"
Tambien he tenido la precaución de no guardar la pagina en la caché del navegador.
Que puedo se hacer?
Un saludo
Iñaki
| |||
Access + ASP Aleatorio Hola a todos estoy intentado mostar los resultados de una sql de forma aleatoria pero no lo consigo. La consulta es: Código PHP: Tambien he tenido la precaución de no guardar la pagina en la caché del navegador. Que puedo se hacer? Un saludo Iñaki
__________________ hay 10 tipos de personas los que piensan en binario y los que no |
| |||
Pues creo que para asp y BBDD Access, no hay manera (por más que he leido, tampoco lo he encontrado) de hacerlo directamente desde la consulta SQL (ojo!, si desde la misma aplicación) Para Access siempre lo he realizado directamente desde el cursor. Por ejemplo
Código:
Este ejemplo funcionará tanto si haces la conexión para Access, MSSQL, MySQL, etc...adoConn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=dondeestelaBBDD" strSQL = "SELECT * FROM latablaquequieras" Set RSrandom = Server.CreateObject("ADODB.Recordset") RSrandom.Open strSQL, adoConn, 1, 2 rndMax = CInt(RSrandom.RecordCount) 'Pasmos el numero de registros totales a la variable rndMax Randomize Timer 'Realizamos un Randomize para que siempre nos de un valor diferente. Creo que sin el Timer, también funciona ok. rndNumber = Int(RND * rndMax) 'Con RND escojemos un número con la referencia máxima del número de registros (variable rndMax) RSrandom.Move rndNumber 'Finalmente nos movemos al registro y hacemos lo que queramos con el RSrandom.Close Set RSrandom = Nothing Set adoConn = Nothing Inicialmente el ejemplo lo saqué de aquí Saludos! Última edición por NeoZ; 29/06/2006 a las 06:54 |
| |||
Gracias por el interés: Esta opción no me vale porque se muestran todos los registros del recordset, y yo los voy a paginar así que no me vale. Muchisimas gracias de todas formas y seguiré buscando. Un saludo Iñaki
__________________ hay 10 tipos de personas los que piensan en binario y los que no |
| ||||
Trata esto: http://www.mvps.org/access/queries/qry0011.htm Solo convierte la funcion de VB a VBScript. Saludos
__________________ "El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera." -- Ernest Hemingway |
| |||
Sigo con mis problemas. He creado el modulo en access con la función que me indicó u_goldman ![]() luego creo la consulta con la sentencia que me indicó u_goldman ![]() La ejecuto desde access y funciona perfectamente ![]() Pero cuando ejecuto la página ASP me da un error "La función 'randomizer' no está definida en la expresión" ![]() Así que creo la función randomizer en mi codigo ASP (es que estoy desesperado ) y por su puesto persiste el error. Ya no se que hacer, pero bueno. Un saludo kaki
__________________ hay 10 tipos de personas los que piensan en binario y los que no |
| ||||
Disculpame... pero si lo vas a paginar... ¿por qué los querés aleatorios? Digo, me parece que no tendría sentido.. porque en la página 1 estarían los 10 primeros (por decir un número) aleatorios. Cuando pasás a la página dos, al ser aleatorio, tal vez te encuentres con algunos de los 10 primeros... y si tenés 3 páginas (también por decir un número) es probable que al navegar las 3 hayan registros que nunca aparezcan pòr el echo de ser aleatorio.
__________________ ...___... |
| ||||
Cita: Bueno, a mi particularmente me sucedió que lo tenía que hacer así, paginado, aleatorio y además por niveles, o sea que mostraríamos X registros ordenados aleatoriamente de entre 4 niveles diferentes, pero además la página contenía N registros totales. Ahora, para controlarlo, como son 10, puedes enviar los links de página o los famosos botones de siguiente por post, y en un hidden envías los ids que ya fueron seleccionados para excluirlos, solo tendrías que aumentar un NOT IN(1,7,90,59, N)
Iniciado por Al Zuwaga Disculpame... pero si lo vas a paginar... ¿por qué los querés aleatorios? Esa fué la solución a la que llegué, cabe mencionar que no eran muchos registros tampoco, de lo contrario no se que tan eficiente sea. Saludos
__________________ "El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera." -- Ernest Hemingway |
| |||
Los necesito aleatorios para que no aparezcan siempre los mismos en los primeros puestos. El tema de que puedan aparecer siempre los mismos lo habia pensado resolver de la siguiente forma: Leyendo vi que para generar consultas con resultados aleatorios se usa el rnd(valor) , valor se genera con un ramdom por que sino los resultados son siempre iguales y así que había pensado en varias cosas: 1º pasar ese valor por medio de una querystring 2º si la query esta vacía creo un valor aleatorio y hago la consulta a la base de datos 3º si la query no está vacia hago la consulta con ese valor( que debe ser el de la consulta anterior y así los resultados "aleatorios" serían lo mismos y así los puedo paginar ). Bueno si me he explicado, esa era la idea , pero veo que mi gozo en un pozo pues no consigo resultados aleatorios desde asp , aunque si con access. Un saludo Iñaki
__________________ hay 10 tipos de personas los que piensan en binario y los que no |
| ||||
Cita: buena solución, no se me ubiese ocurrido eso ;) y en un hidden envías los ids que ya fueron seleccionados para excluirlos, solo tendrías que aumentar un NOT IN(1,7,90,59, N)
__________________ ...___... |
| |||
Cita: buff... inventiva al poder ! y en un hidden envías los ids que ya fueron seleccionados para excluirlos, solo tendrías que aumentar un NOT IN(1,7,90,59, N) ![]() x kaki. Veo que tienes por ahí algún post mas sobre este tema (me imagino que todos van por el mismo). Cuando trabajas con una aplicación configurable con diversas conexiones de diferentes BBDD, es realizar un código "standard". En este caso Access se queda bastante "justito" en cuanto a funciones de SQL y sobretodo en velocidad. Yo creo que una buena solución (y que además funcionaria con otros servidores de BBDD, eso si, mucho más lento) sería la que has iniciado en los otros post. 1. Recuperas registro 2. Lo pasas a un array 3. Aleatoriamente vas extrayendo varios registros, a medida que también para no repetirlos los vas eliminando del array Bueno, si se me ocurre algo luego te lo comento. Ahora estoy liado con el peque ![]() Saludos!!! |
| ||||
Yo desarrollé algo parecido hace un tiempo, un tremendo script que al final nunca lo usé porque decidí que no utilizaría access nunca más je je je, así que al final todo se resolvió con un NEWID() en SQL, pero bueno, creo yo que la solución ya ha sido planteada, cualquiera de esos links deberían funcionar, si no es así bueno, aquí está este, pero repito, no es lo más eficiente, es un tremendo script: http://www.forosdelweb.com/showthrea...ght=aleatorios Saludos
__________________ "El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera." -- Ernest Hemingway |
| |||
Bueno finalmente he decidido agregar un order by multiple a la consulta sql es decir haré un order by campo1 , campo2 , campo3 , campo4 . Para seleccionar los campo1 ,campo2, campo3 y campo4 creo un array con los nombres de los campos, despues genero los numeros aleatorios y los añado a la consulta. Así genero registros aleatorios pero con un patrón, con lo que puedo paginarlos sin repetir ninguno pero cada vez que se inicia una busqueda los resultados son distintos. Bueno pongo el código para que se entienda Código PHP: ![]() Bueno ahora lo testearé un poco y listo Gracias por su colaboración. Un saludo Iñaki
__________________ hay 10 tipos de personas los que piensan en binario y los que no Última edición por kaki; 30/06/2006 a las 07:34 |