Помогите с запросом

Panchous

Павел
Помогите с запросом

Есть баннеры (id, image, order)
order - порядок отображения (1,2...) или NULL

необходимо вывести K неповторяющихся баннеров, отсортированных по порядку возрастания:

Если баннеров с заданным порядком N<K шт.,
то вывести эти N баннеров + (K-N) рандомных, но неповторяющихся...

Хочется сделать это меньшим числом запросов к базе.
Красиво и оптимально.

Или не париться и решать задачу пошагово:
- выбираем баннеры с порядком
- считаем их кол-во и запоминаем id
- выбираем недостающие (distinct where id not in (....) limit ...)

PS:
MySQL 4.1
 

Steamroller

Новичок
С заданным порядком - это в смысле null или не null?
Тогда первым запросом - выбираешь баннеры с порядком:
select * from banners where b_order is not null order by b_order limit K;
Вторым соответсвенно - where b_order is null (либо с order by rand() limit ... либо если это тормозит - целиком, и случайные отбирать в php).
 

Panchous

Павел
С заданным порядком - это в смысле null или не null?
те, для которых указан порядок явно. Остальные порядковые номера заполнить рандомными...

а одним запросом никак?
 

Steamroller

Новичок
Одним можно, сортировать по навороченному IF(....), но это шибко тормозное решение, что обычно для баннерной крутилки неприемлимо.

-~{}~ 18.11.05 17:49:

Типа ORDER BY IF(ISNULL(b_order),1000*1000+rand()*100,b_order) LIMIT N
 
Сверху