Я пытаюсь получить случайную строку в MySQL.Вот мой подход:
SELECT *
FROM users
WHERE id =
(SELECT floor((max(id) - min(id) + 1) * rand()) + min(id)
FROM users);
Это может вернуть пустой набор, если в идентификаторах есть пробелы.Я в порядке с этим.Однако,
- У меня нет пробелов, и я все еще довольно часто получаю пустой набор .
- Более тревожно: я получу два или более результата время от времени.
В чем причина этого странного поведения?Как, я правильно понял?
Примечание:
- стол довольно большой (10 ^ 6 ... 10 ^ 7);Я не могу использовать ни одно из очевидных и известных решений, основанных на случайном порядке или даже на использовании count () .
- Я застрял сMySQL, мне все равно, как это делается на стороне клиента ruby / PHP / что угодно.
- Я пытался приводить плавающие типы, но это не помогло.
- Соответствующий вариант PostgreSQL (случайный вместо rand и некоторых типов типов) работает нормально.