В настоящее время я создаю какой-то веб-сайт с викториной.
Мой план: создать случайное число в моем операторе sql, чтобы получить случайный вопрос из моей таблицы.
Например. у каждого вопроса есть числовой идентификатор -> создание случайного числа (максимальное количество = записи в моей таблице) -> выбор случайного вопроса по идентификатору
Я попробовал следующее утверждение:
SELECT *
FROM question
WHERE ID = (SELECT FLOOR(RAND() * (SELECT COUNT(ID) FROM question)) + 1);
Моя проблема: иногда я не получал результата, иногда получал два результата, а иногда все работало так, как планировалось.
Если я попробую самостоятельно выполнить SELECT FLOOR и т. Д., Случайное число будет работать отлично.
Какие-либо предложения? Заранее спасибо, друзья!
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;
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.