From: | Gunnar Wolf <gwolf(at)gwolf(dot)org> |
---|---|
To: | Raul Caso <feve18(at)gmail(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Ayuda recuperar registros aleatorios en postgres 8.0 |
Date: | 2005-11-29 15:15:12 |
Message-ID: | 20051129151512.GC15085@gwolf.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Raul Caso dijo [Mon, Nov 28, 2005 at 07:28:38PM -0500]:
> Hola amigos tengo un problemita y no se si me podrian ayudar la cuestion es
> esta estoy desarrollando un sistema para tomar examenes en linea y un amigo
> mio ya hizo el modulo para tomar preguntas y formar el examen el problema
> es que las preguntas tienen que ser aleatorias y esa es mi parte :( como el
> ya hizo su modulo me gustaria crear una funcion que lea una tabla donde ya
> estan un numero de preguntas y aleatoriamente me devuelva un determinado
> numero de registros k yo ingreso como parametro en la funcion he intentado
> cosas pero no sale nada no se si alguien me pueda dar una mano gracias
Sucio, pero funciona :)
CREATE or replace function pregunta_al_azar () RETURNS integer AS
'DECLARE
preg_offset integer;
pregunta integer;
BEGIN
SELECT INTO id_preg (random()*(select count(id) from preg))::integer;
SELECT INTO pregunta id FROM preg OFFSET id_preg LIMIT 1;
RETURN pregunta;
END;' language 'plpgsql';
¿Que qué fregados estoy haciendo?
Primero que nada, elijo un número al azar entre 0 y el número total de
renglones que tiene la tabla. Ese número no me sirve directamente,
porque no hay garantía de que todos los IDs estén siendo utilizados
(por ejemplo, puedes borrar a un registro), así que, teniendo ese
número, tomo la pregunta que le corresponda de la tabla.
Como puntito adicional: Recuerda que no tienes garantía alguna
respecto al ordenamiento de los datos dentro de una tabla - Ni
siquiera te estoy entregando el ID número id_preg, sino que te entrego
el registro id_preg con respecto al listado que me entregó Postgres en
determinado momento.
Saludos,
--
Gunnar Wolf - gwolf(at)gwolf(dot)org - (+52-55)1451-2244 / 5623-0154
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973 F800 D80E F35A 8BB5 27AF
From | Date | Subject | |
---|---|---|---|
Next Message | Ing. Jhon Carrillo // Caracas, Venezuela | 2005-11-29 15:33:23 | Sobre Bizgres |
Previous Message | Jaime Casanova | 2005-11-29 15:13:00 | Re: alter de una tabla |