Общие > Базы данных
Случайная картинка
Egorsha:
Это полный запрос. Поменяй только название базы, если не совпадает.
А ветка скорее всего "Базы данных".
Там кстати такое уже обсуждалось - одна случайная запись из базы.
tigranav:
Примного благодарен.
html_coder:
--- Цитировать ---Egorsha:
По другому тоже можно. И быстрее будет. Но это тема другой ветки форума.
SELECT * FROM images ORDER BY RAND() LIMIT 1
- всего один запрос.
--- Конец цитаты ---
Egorsha, а вы уверены что это будет быстрее???
А если таблица будет большая?
Из документации по MySQL:
В выражениях вида ORDER BY не следует использовать столбец с величинами RAND(), поскольку применение оператора ORDER BY приведет к многократным вычислениям в этом столбце.
Egorsha:
Если уж очень интересно, то попытаюсь ответить...
(Хотя сейчас, после переноса топика в другую ветку - опять разговор не по теме получится.)
На счет уверенности - скорее уверен в том, что ни в чем не уверен.
Но осмелюсь заметить, что в заданном вопросе не уточнялась какая база используется. (Решили, что MySQL - типа "по умолчанию"). А вдруг у других БД в документации по иному прописано.
Быстрее? Можно проверить на опыте, в данном конкретном случае (это дело задавшего вопрос).
И еще хочу объяснить, то почему ответил в этом топике.
Мне просто не понравился первоначальный Ваш ответ. :)
Почему?
Все просто - приведенный Вами код делает не то, о чем спрашивали.
Построчно:
- запрос на количество записей в таблице;
- получение количества записей;
- случайное число N в интевале от "нуля" до "количество записей"
-... и наконец получение N первых записей из таблицы (но не одной случайной)
При Вашем подходе к поставленному вопросу, нужно сделать выборку всех записей (при большой базе - получится большой массив), в посчитать количество элементов массива, случайным образом выбрать элемент массива, содержащий id-записи и по этому id получить запись из базы. Нумерация записей может быть не скозной, а с пробелами (к примеру записи id=999 может не быть в базе, а N=999).
И что так быстрее будет (если база большая)?
И, кстати, вместо функции rand() лучше бы воспользоваться mt_rand()....
Но от темы уже ушли.
Может закрыть эту тему? а?
for_i_0:
Egorsha
[OFF]Пожалуй, подождем html_coder - а.[/OFF]
Навигация
Перейти к полной версии