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);
При тестировании запрос иногда выдает пустое значение, иногда несколько строк. Что я сделал не правильно?
Для правильного вопроса надо знать половину ответа
RAND у вас вызывается для каждой строки и вы получаете те строки, в которых произошло совпадение по условию. Теоретически, есть вероятность, что вы получите все строки.
Попробуйте так:
Почему он вызывается для каждой строки? RAND у меня стоит в условии и вызывается один раз при выполнении запроса. LIMIT 1 помог разобраться с проблемой вывода нескольких значений. Спасибо!
Но осталась проблема вывода пустых значений.
RAND() in a WHERE clause is evaluated for every row (when selecting from one table) or combination of rows (when selecting from a multiple-table join).