Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

Next:From: Ing. Jhon Carrillo // Caracas, VenezuelaDate: 2005-11-29 15:33:23
Subject: Sobre Bizgres
Previous:From: Jaime CasanovaDate: 2005-11-29 15:13:00
Subject: Re: alter de una tabla

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group