У меня есть набор данных, каждый из которых имеет число «шансов» от 1 до 100. Я стараюсь сделать это наиболее эффективным способом. Коэффициенты не обязательно составляют до 100.Выберите случайную строку, но с коэффициентом
У меня было несколько идей.
a) Выберите весь набор данных, а затем добавьте все коэффициенты и создайте случайное число от 1 до этого числа. Затем пройдите через набор данных, вычитая коэффициенты из числа до тех пор, пока оно не станет 0.
Я надеялся минимизировать влияние на базу данных, поэтому я подумал, могу ли я выбрать только нужные мне строки.
б)
SELECT * FROM table WHERE (100*RAND()) < odds
Я считал LIMIT 0,1
Но если элементы имеют одинаковую вероятность только один из будет возвращен
В качестве альтернативы взять весь набор данных и выбрать случайное одно из там ... но тогда шансы влияют, поскольку они становятся случайными с шансами, а затем случайными без шансов, поэтому шансы становятся наклонены в пользу более высоких коэффициентов (тем более).
Я думаю, я мог бы order by odds
ASC затем взять весь набор данных, а затем с PHP взять случайный из строк с теми же шансами, что и первая запись (самая низкая).
Кажется, это неуклюжие решения.
У кого-нибудь есть превосходное решение? Если нет, какой из вышеперечисленных вариантов лучше?
Возможно, вы захотите взглянуть на этот вопрос: http://stackoverflow.com/questions/1819293/how-to-add-weights-to-a-mysql-table-and-select-random-values- по-русски – tplaner
Сколько строк в наборе данных имеют коэффициенты? –
У них все шансы. Возможно, всего 20 - 50 рядов. – Pablo