Re: Ayuda recuperar registros aleatorios en postgres 8.0

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

In response to

Browse pgsql-es-ayuda by date

  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