powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / выбор случайной записи, взвешенной коэффициентом
8 сообщений из 8, страница 1 из 1
выбор случайной записи, взвешенной коэффициентом
    #32444551
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посоветуйте красивое решение, как можно выбрать случайную запись из таблицы

banner
======
idbanner bigint
banner blob
koeff smallint

, чтобы частота встречаемости определялась коэффициентом....

хотя бы для упрощенного случая, когда точно известно, что сумма всех коэффициентов select sum("koeff") from "banner" равна 100
...
Рейтинг: 0 / 0
выбор случайной записи, взвешенной коэффициентом
    #32444584
Andrew Kruchinin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такая ХП не подойдет?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
C=RANDOM( 100 );
FOR SELECT IDBANNER, BANNER, KOEFF
      FROM BANNER
      INTO :IDBANNER, :BANNER, :KOEF
      ORDER BY KOEFF
DO
 BEGIN
  IF (C<KOEFF) THEN
    BEGIN
      SUSPEND;
      EXIT;
    END
 END


Или некрасиво? :-)
...
Рейтинг: 0 / 0
выбор случайной записи, взвешенной коэффициентом
    #32444718
rst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/topic/80810
...
Рейтинг: 0 / 0
выбор случайной записи, взвешенной коэффициентом
    #32444895
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>fedd

Общий алгоритм для общего, а не упрощенного, случая (реализация - ХП).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
R=RANDOM( 100 )
K= 100 /(SELECT SUM(koeff) FROM banner)
B= 0 
FOR SELECT ... INTO :koeff DO BEGIN
  B=B+koeff*K 
  IF (R<=B) THEN BEGIN
     <то, что надо. выходим>
     END
  END


>Andrew Kruchinin
>Или некрасиво? :-)

Не то, чтобы некрасиво, но неправильно однозначно :)
...
Рейтинг: 0 / 0
выбор случайной записи, взвешенной коэффициентом
    #32444980
Andrew Kruchinin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не то, чтобы некрасиво, но неправильно однозначно :)

Упс, понял :-) Самому было интересно, но ночью как-то упустил некоторые моменты из виду. Да, это думаю то что надо человеку, хотя ему решать. Зато там в MS SQL такие таблицы строятся, с нормальными распределениями и т.д. Ужас просто, аж страшно.
...
Рейтинг: 0 / 0
выбор случайной записи, взвешенной коэффициентом
    #32445021
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо!

Johnmen, круто! :) а order by koeff в твоем случае не нужен? (мне пока мозгов с утра не хватает осмыслить..)
...
Рейтинг: 0 / 0
выбор случайной записи, взвешенной коэффициентом
    #32445038
Andrew Kruchinin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В данном случае сортировка пофиг. Собственно я где-то к этому и шел, потому сортировку и включил. Только вот где-то на задворках маячила мысль что где-то что-то не так, но настолько неявная что ее остальные мысли задавили. Но безусловно последний вариант верный в любом случае.
...
Рейтинг: 0 / 0
выбор случайной записи, взвешенной коэффициентом
    #32445045
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>fedd

Совершенно верно. Не нужен :)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / выбор случайной записи, взвешенной коэффициентом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]