Учитывая следующую таблицу:

У нас есть следующий оператор SQL, который возвращает случайную строку:
SELECT r1.id, game_desc, rarity, unlocks_prior
FROM items_permanent AS r1
JOIN (
SELECT (RAND() * (SELECT MAX(id) FROM items_permanent)) AS id
) AS r2
WHERE r1.id >= r2.id AND r1.unlocks_prior is Null
ORDER BY r1.id ASC
LIMIT 1
Это работает отлично, как есть, но когда нам нужно рандомизировать по редкости, и, следовательно, нужно изменить вышеприведенное на следующее:
SELECT r1.id, game_desc, rarity, unlocks_prior
FROM items_permanent AS r1
JOIN (
SELECT (RAND() * (SELECT MAX(id) FROM items_permanent)) AS id
) AS r2
WHERE r1.id >= r2.id AND r1.unlocks_prior is Null AND r1.rarity = ?
ORDER BY r1.id ASC
LIMIT 1
Иногда оно вообще не возвращает строк, с пугающей регулярностьюскажем, один из десяти казней).
Что вызывает это?И как я мог предотвратить или исправить это?