Случайный выбор

688
.
Имеется:
mysql таблица kartinka,в которой есть 10 строк (структура id,image)

и массив
$r=array('',4,0,15,3,1,0,7,25,6,30);
Необходимо случайным образом выбрать одну строку из таблицы,причем шанс быть выбранным согласован с массивом $r (id=1 с $r[1] ,id=2 с $r[2] ...)
Таким образом чаще других должны выпасть картинки 3,8 и 10,а картинки 2 и 6 не выпадут никогда.
.
8 и 10 в массиве $r нет. Так и должно быть? Если да, то какая тогда связь с массивом?
.
Jane
Блиносвёрт ?
dilp, переделай массив, исключи оттуда то, что не должно выпасть, добавь дополнительно элементов, которые должны выпадать чаще, т.е. по теории вероятностей сформируй новый массив, а дальше рэндом
.
aNNiMON
ДоХтор, в массиве указана частота выбора, id картинки совпадает с индексом в массиве.
таблица (+/-)


dilp, проблема в том, что частоты указаны в php, а данные лежат в mysql.
Если можно как-то вынести их из массива в таблицу, то задача решается очень просто:
SELECT * FROM kartinka ORDER BY freq * RAND() LIMIT 1

или чуть посложнее:
SELECT * FROM kartinka
WHERE freq > 0
ORDER BY -LOG(1.0 – RAND()) / freq
LIMIT 1
.
Добавлено: 23.04.2017 / 11:10
aNNiMON,
id картинки совпадает с индексом в массиве.
Так я о том и говорю, что в его массиве нет некоторых id картинок.

Добавлено: 23.04.2017 / 11:16
aNNiMON - теперь понял о чём ты говорил.
.
ДоХтор
dilp,
Вариант (+/-)
.
Добавлено: 23.04.2017 / 17:57
Jane, Переделка не желательна,так как настройки этого эквалайзера будут менятся.
Р.S еще не тестил

Добавлено: 23.04.2017 / 18:23
У mysql Rand() есть что-то вроде инициализации,что-бы заново повторить ту же выборку?
.
(\/)____o_O____(\/)
dilp, вроде это обычный рандом
.
Как это? Любой рандом должен иметь вводные данные,и от них дальше плясать
.
dilp, в мануале прочитать не?
* (+/-)
Всего: 38