Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / select random chance / 9 сообщений из 9, страница 1 из 1
01.12.2014, 14:21:50
    #38821383
jemoje
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select random chance
tabl
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
name		chance
----------------
один		25
два		15
три		10
четыре	5
пять		4
шесть	3

как сделать выбрать одно значение с условием соблюдения шанса?
...
Рейтинг: 0 / 0
01.12.2014, 15:16:39
    #38821443
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select random chance
jemoje,

Код: sql
1.
2.
3.
4.
5.
6.
SELECT *
FROM
(SELECT name, @c := @c + chance AS chance
FROM tabl, (SELECT @c := 0) v) v
HAVING ROUND(RAND()*@c) <= chance
LIMIT 1;
...
Рейтинг: 0 / 0
01.12.2014, 15:28:23
    #38821458
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select random chance
JeStonejemoje,

Код: sql
1.
2.
3.
4.
5.
6.
SELECT *
FROM
(SELECT name, @c := @c + chance AS chance
FROM tabl, (SELECT @c := 0) v) v
HAVING ROUND(RAND()*@c) <= chance
LIMIT 1;



ROUND(RAND()*@c)

а это то зачем? типо что если шансы будут дробными, чтоб логика нарушилась?

всмысле если для какогото варианта будет диапазон 50,1..50,4 - то округляем чтоб он никогда не выпал?

и второй момент, а если на чтото стоит шанс 0 :) тогда при сумме шансов получиться

таблица
а 10
б 0
в 0
с 90

с суммами
а 10
б 10
в 10
с 100

случайное выпало 9 - что брать?

======
раунд забрать, сортировку (или лучше выброс нулей) добавить
...
Рейтинг: 0 / 0
01.12.2014, 15:45:40
    #38821487
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select random chance
alex564657498765453,
Агамсь, написал не подумав.
Тогда как-то так. Отрицательные шансы тоже отбрасываем (мало ли кто додумается...)
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT *
FROM
(SELECT name, @c := @c + chance AS chance
FROM table1, (SELECT @c := 0) v
WHERE chance > 0) v
HAVING RAND()*@c <= chance
LIMIT 1
...
Рейтинг: 0 / 0
02.12.2014, 09:01:48
    #38822162
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select random chance
LIMIT без ORDER BY? а смысл?
...
Рейтинг: 0 / 0
02.12.2014, 11:07:15
    #38822289
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select random chance
Akina,
А смысл ORDER BY, если записи итак будут отсортированы по шансу и верхняя строка - это именно та, шанс которой выпал?
...
Рейтинг: 0 / 0
02.12.2014, 11:20:14
    #38822302
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select random chance
JeStoneесли записи итак будут отсортированы по шансуСфига бы? Нет ORDER BY - нет и сортировки. Нет сортировки - сервер имеет право отдать записи в любом порядке. И то, что как правило они отдаются в некоем известном порядке, не гарантирует, что так будет всегда. И тогда станет мучительно больно.
...
Рейтинг: 0 / 0
02.12.2014, 13:31:41
    #38822537
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select random chance
AkinaJeStoneесли записи итак будут отсортированы по шансуСфига бы? Нет ORDER BY - нет и сортировки. Нет сортировки - сервер имеет право отдать записи в любом порядке. И то, что как правило они отдаются в некоем известном порядке, не гарантирует, что так будет всегда. И тогда станет мучительно больно.
Исходя из вероятностной природы самого представленного запроса и вероятности нарушения ожидаемого порядка при выдаче результата, вы врядли даже заметите, что вероятность выборки того или иного результата немного отклонена от нормального распределения. Хотя конечно добавить сортировку можно, если уж у вас душа лежит к перфекционизму.
...
Рейтинг: 0 / 0
02.12.2014, 14:57:19
    #38822651
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select random chance
У меня душа лежит к детерминированности результата.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / select random chance / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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