- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
В таблице есть 2 поля: имя баннера(TEXT) и вероятность(INT):
name | perc
1.jpg | 20
2.jpg | 50
3.jpg | 30
Как выбирать данные соотвественно вероятностям(процентам). Тоесть, ттобы из 10 запросов к таблице чтобы 2 раза выбрало 1.jpg, 5 раз 2.jpg и 3 раза 3.jpg
Подозреваю что такого оператора нет.. Помогите придумать алгоритм
http://stackoverflow.com/questions/13040246/select-random-row-from-a-postgresql-table-with-weighted-row-probabilities
http://stackoverflow.com/questions/13040246/select-random-row-from-a-postgresql-table-with-weighted-row-probabilities
там пример для PostgreSQL, а для Mysql этот синтаксис подойдет?
если данные о процентах статические то можно сделать проще
name |
1.jpg
1.jpg
2.jpg
2.jpg
2.jpg
2.jpg
2.jpg
3.jpg
3.jpg
3.jpg
и брать простым рандомом
В mysql нету "WITH"
Каждый раз выбирать рендомом - большая нагрузка на базу, если она большая.
Что можно сделать:
а) выбирать допустим 10 случайных и кешировать их на час, а на приложении уже выбирать их согласно весов.
б) завести дополнительное поле "Накопительный вес".
Потом:
1) зная суммарный вес WeightSum,
2) генерируем случайное число $WeightRand = rand(0, Sum)
3) выбираем из базы запись с условием WHERE Weight > $WeightRand ORDER BY Weight ASC LIMIT 1
Минусы: при деактивации баннера нужно обновлять накопительные веса всем баннерам после него.
б) завести дополнительное поле "Накопительный вес".
Потом:
1) зная суммарный вес WeightSum,
2) генерируем случайное число $WeightRand = rand(0, Sum)
3) выбираем из базы запись с условием WHERE Weight > $WeightRand ORDER BY Weight ASC LIMIT 1
Минусы: при деактивации баннера нужно обновлять накопительные веса всем баннерам после него.
заинтересовало... ктати, выборку можно сделать на чистом sql, без пхп и т.д.
исходную табличку дополнил полем WeightSum:
вроде работает :)
заинтересовало... ктати, выборку можно сделать на чистом sql, без пхп и т.д.
исходную табличку дополнил полем WeightSum:
вроде работает :)
Возьму на заметку, интересное решение :)
Возьму на заметку, интересное решение :)
Работает, да не совсем правильно. Результаты выдает инверсно, то есть с точностью до наоборот. Значение, у которого 80% выборки, выпадает только в 20% случаев.
И при этом, если случайное число будет меньше, чем минимальный процент, то результата не будет вообще.