Веб-страница должна отображать одно изображение продукта для определенной категории продукта из базы данных PostgreSql. Это изображение должно автоматически изменяться на другое изображение каждые 25 секунд. Возвращенный продукт может быть случайным или в некоторой последовательности. Некоторый продукт может отсутствовать, а некоторые повторяются, но большинство продуктов в критериях должны возвращаться. Суммарное количество доступных изображений может меняться незначительно в зависимости от образца.Как вернуть строку образца из базы данных по одному
Используется код ниже, который выполняется через каждые 25 секунд. Для этого требуется два запроса к базе данных: один для подсчета, который может быть slwo и вторым для для получения одного изображения. В обоих случаях, когда предложения дублируются, в реальном приложении, где предложение очень велико, и его изменение требует изменений в двух местах.
Как улучшить это, чтобы один запрос возвращал образец? Типы столбцов не могут быть изменены, используются натуральные первичные ключи. Дополнительные столбцы, триггеры, индексы, последовательности могут быть добавлены, если это поможет.
ASP.NET/Mono MVC3, npgsql.
$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
);
спасибо. Ссылка в ответ описывает, что это дорого: он будет извлекать все строки и сортировать в памяти. Если это самый эффективный способ в PostgreSql? – Andrus