Подтвердить что ты не робот

Mysql 1 Random Row

Возможный дубликат:
Как запросить случайную строку в SQL?

Правильно ли это делается?

$query = 'SELECT * FROM gameids ORDER BY timestamp RAND LIMIT 1';
4b9b3361

Ответ 1

Неправильно. Вы не можете упорядочить по столбцу (afaik), если хотите, чтобы он был рандомизирован.

$query = 'SELECT * FROM gameids ORDER BY RAND() LIMIT 1';

Ответ 2

Вам не нужно указывать, какой столбец рандомизирован, но вам нужно () после RAND, потому что это функция.

SELECT
  * 
FROM
  gameids 
ORDER BY 
  RAND()
LIMIT 1

Ответ 3

RAND - это функция и не эффективна в больших таблицах, потому что она не использует индексы.

$query = 'SELECT * FROM gameids ORDER BY RAND() LIMIT 1';

Одним из возможных решений является добавление столбца с именем random, а для каждой записи генерирует случайное число для него, тогда, когда вы запрашиваете базу данных, заказывайте этот столбец, и вы получите псевдослучайное, но на этот раз с использованием индексов.

$query = 'SELECT * FROM gameids ORDER BY timestamp, random LIMIT 1';

Изменить: Вы также можете сделать RAND() более "гибким", применив некоторое выражение, подобное этому RAND() * MAX(numeric_column_name)

Если вы заинтересованы в оптимизации, взгляните на это сообщение в блоге: http://jan.kneschke.de/projects/mysql/order-by-rand/

@Marwelln правильно.