Cómo devolver una fila de muestra de la base de datos una por una

La página web debe mostrar una imagen de producto para una categoría de producto específica de la base de datos PostgreSql. Esta imagen debería cambiar automáticamente a otra imagen después de cada 25 segundos. El producto devuelto puede ser aleatorio o en alguna secuencia. Es posible que falte algún producto y que se repita, pero la mayoría de los productos en los criterios deben devolverse. El recuento total de imágenes disponibles puede variar ligeramente entre la recuperación de la muestra

Actualmente se usa el siguiente código que se ejecuta después de cada 25 segundos. Esto requiere dos consultas a la base de datos: una para el recuento que puede ser dos y la segunda para la recuperación de una sola imagen. En ambos casos donde las cláusulas están duplicadas, en la aplicación real donde la cláusula es muy grande y cambiarla requiere cambios en dos lugares.

¿Cómo mejorar esto para que una sola consulta devuelva la muestra? Los tipos de columnas no pueden cambiarse, se utilizan claves primarias naturales. Columnas adicionales, desencadenadores, índices, secuencias pueden agregarse si esto ayuda.

ASP.NET/Mono MVC3, npgsql se utilizan.

$count = select count(*)
         from products
         where prodtype=$sometype and productid in (select productid from images);

$random = next random integer between 0 .. $count-1;

--  $productsample  is result: desired sample product
$productsample = select product
          from products
          where prodtype=$sometype and productid in (select productid from images)
          offset $random
          limit 1;


create table products ( productid char(20) primary key,
   prodtype char(10) references producttype 
);

create table images(
id serial primary key, 
productid char(20) references products,
mainimage bool
);

Respuestas a la pregunta(2)

Su respuesta a la pregunta