MySQL выбрать случайным образом с вероятностью - PullRequest
6 голосов
/ 09 января 2012

Допустим, у меня есть таблица базы данных с целочисленным полем - назовите ее «аромат», и значения этого поля могут быть только числами от 1 до 10.

Есть ли способ выбратьодна случайная строка из базы данных, с вероятностью 20% это будет аромат 6, 30% вероятность, что это будет аромат 2, и 50% вероятность, что это будет аромат 1?


Извиненияза поздний ответ - большое спасибо за помощь.Кажется, что ответ Евгения лучше всего охватывает то, что мне нужно;Я знаю об опасностях ORDER BY rand (), но приложение, которое я пишу, не будет работать с большим источником данных или поддерживать много одновременных пользователей.Так что я пойду с этим и приму хит производительности.

Ответы [ 2 ]

4 голосов
/ 09 января 2012
SELECT
  IF(@rnd<0.5,1,IF(@rnd<0.8,2,6)) AS rndflavour
FROM
  (SELECT @rnd:=rand()) AS rndinit;

Дает вам вкус с запрошенными вероятностями.

SELECT * FROM tablename ORDER BY rand() LIMIT 1

дает вам одну случайную строку. Теперь мы собрали это вместе:

SELECT
  tablename.*
FROM
  tablename
  INNER JOIN (
    SELECT
      IF(@rnd<0.5,1,IF(@rnd<0.8,2,6)) AS rndflavour
    FROM
      (SELECT @rnd:=rand()) AS rndinit
  ) AS rndview ON rndview.rndflavour=tablename.flavour
ORDER BY rand()
LIMIT 1
0 голосов
/ 09 января 2012

Я предлагаю разделить задачу

1 написать некоторую логику, которая присваивает значение переменной: your_flavour с соответствующими шансами

2

select * from YOUR_TABLE where FLAVOUR = :your_flavour order by rand() limit 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...