В настоящее время я создаю какой-то веб-сайт с викториной.

Мой план: создать случайное число в моем операторе sql, чтобы получить случайный вопрос из моей таблицы.

Например. у каждого вопроса есть числовой идентификатор -> создание случайного числа (максимальное количество = записи в моей таблице) -> выбор случайного вопроса по идентификатору

Я попробовал следующее утверждение:

SELECT *
FROM question
WHERE ID = (SELECT FLOOR(RAND() * (SELECT COUNT(ID) FROM question)) + 1);

Моя проблема: иногда я не получал результата, иногда получал два результата, а иногда все работало так, как планировалось.

Если я попробую самостоятельно выполнить SELECT FLOOR и т. Д., Случайное число будет работать отлично.

Какие-либо предложения? Заранее спасибо, друзья!

1
Rendolph 23 Окт 2019 в 21:07

1 ответ

Лучший ответ

Если у вас не так много вопросов, вы можете просто сделать:

select q.*
from question q
order by rand()
limit 1;

Если у вас много вопросов, то сокращение их количества важно для производительности. Что-то вроде:

select q.*
from question q cross join
     (select count(*) from q) qq  
where rand() < 100 / q   -- get a sample of about 100
order by rand()
limit 1;
0
Gordon Linoff 23 Окт 2019 в 18:09