MySQL случайная запись с уклоном - PullRequest
1 голос
/ 01 августа 2011

Я хотел бы выбрать случайную запись из таблицы, но с уклоном к более высоким значениям в определенном поле - я не хочу, чтобы какая-либо запись имела шанс 0% быть выбранным, просто менее вероятным, чтобы быть выбранным.

Из этой статьи я знаю, что случайный выбор может быть медленным, и вы можете ускорить его: http://wanderr.com/jay/order-by-slow/2008/01/30/

Но что делать, если вы имеете дело с несколькими таблицами с объединениями игде оператор, и хотите использовать одно из полей как способ смещения случайности (чем выше значение этого поля, тем больше шансов быть выбранным)?Например:

SELECT a.id, a.date, a.userid, b.points FROM table_a AS a INNER JOIN table_b AS b ON (a.userid = b.userid) WHERE DATE_SUB(CURDATE(), INTERVAL 60 DAY) <= a.date

Как я могу превратить вышесказанное в эффективный, но не совсем случайный запрос, который будет смещен в сторону более высоких значений b.points?

1 Ответ

0 голосов
/ 01 августа 2011

мои 2 цента, смещение может быть выполнено так:

Предполагая, что счет находится между 0, 100.

Вы случайным образом выбираете 5 записей, которые> 75, 3 записи> 50, 2 записи> 25, 1 запись> 0

Теперь, если вы снова случайным образом выберете эти 11 записей, он смещается в сторону более высокого балла.

Чтобы поместить их в sql, называется ваша объединенная таблица "abc"

Select * from (
select * from abc where b.points > 75 order by rand() limit 5
cross join 
select * from abc where b.points > 50 and b.points <75 order by rand() limit 3
cross join 
select * from abc where b.points > 25 and b.points <50 order by rand() limit 2
cross join 
select * from abc where b.points > 0 and b.points <25 order by rand() limit 1
) as result
order by rand() limit 3

По производительности, я посмотрю вашу ссылку и обновлю этот ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...