@AlexGawr

Mysql почему запрос на выборку с фильтрацией по ключевому полю выдает несколько значений?

Есть временная таблица `tmp_table` с двумя полями:
`id` int(11) unsigned NOT NULL AUTO_INCREMENT, `id_event` int(11), PRIMARY KEY ( `id` ).
В этой таблице 15 строк. Необходимо выводить случайным образом значение `id_event`. Я написал запрос:
SELECT `id_event` FROM `tmp_table` WHERE `id` = FLOOR( RAND() * 15 + 1);
При тестировании запрос иногда выдает пустое значение, иногда несколько строк. Что я сделал не правильно?
  • Вопрос задан
  • 49 просмотров
Решения вопроса 1
vilinyh
@vilinyh
rand() в where вычисляется для каждой строки, поэтому вы получаете 15 сравнений с разными значениями.
set @randomRow = floor(rand() * 15 + 1);
select id_event from tmp_table where id = @randomRow;

или
select id_event from tmp_table order by rand() limit 1;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
RAND у вас вызывается для каждой строки и вы получаете те строки, в которых произошло совпадение по условию. Теоретически, есть вероятность, что вы получите все строки.
Попробуйте так:
WHERE `id` > RAND() * 15
LIMIT 1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы