Можно ли с помощью функций SQL выбирать рандомную запись из таблицы Базы Данных?

Camillo

Новичок
Можно ли с помощью функций SQL выбирать рандомную запись из таблицы Базы Данных?

Как мне выбрать рандомную запись из выдачи?
Вот, например я делаю
SELECT * FROM `bd` WHERE `checked`="none"
а теперь из тех записей что я получу я хочу выбрать рандомом одну. Может быть можно это сделать прямо средствами SQL, а не мучать PHP?
 

SiMM

Новичок
Можно. Было воспользоваться поиском по форуму. Чтобы найти решение в два запроса. SELECT COUNT + mt_rand + SELECT ... LIMIT ...
 

nip

Guest
очень просто:
PHP:
$query="SELECT count(*) FROM `bd` WHERE `checked`=\"none\"";
# Отседова получаем $count - число записей;

# Генерим рандомное число (от 0-го до последнего)
$m  = rand(0,$count);

$query = "SELECT * FROM `bd` WHERE `checked`=\"none\" Limit $m, 1";
# Получаем случайный запрос
Можно, конечно в один запрос вообще (с помощью "AS" и мускульного rnd), но мне как-то искать лениво :) Куда плясать знаешь, думаю придумаешь :)
 

Camillo

Новичок
угу, куда пляасть знаю... спасибо !

-~{}~ 18.03.05 14:42:

Автор оригинала: nip
очень просто:
PHP:
$query="SELECT count(*) FROM `bd` WHERE `checked`=\"none\"";
# Отседова получаем $count - число записей;

# Генерим рандомное число (от 0-го до последнего)
$m  = rand(0,$count);

$query = "SELECT * FROM `bd` WHERE `checked`=\"none\" Limit $m, 1";
# Получаем случайный запрос
Можно, конечно в один запрос вообще (с помощью "AS" и мускульного rnd), но мне как-то искать лениво :) Куда плясать знаешь, думаю придумаешь :)
возник вопросик еще один...
вот в этом запросе:
SELECT count(*) FROM `bd` WHERE `checked`=\"none\"
юзается такая вещь как count(*)
а потом идет обращение к переменной $count, когда генерим случайное число в диапазоне.
Так вот - попробовал дословно как у автора - пхп пишет что мол переменная $count не определена =(

Можно еще какой нить пример? А то что-то не очень мне понятен синтаксис...
 

IntenT

SkyDiver
--cut-- [Reason: ибо был неправ]

Camillo
SiMM
Решение вообще-то в 1запрос

... ORDER BY RAND() LIMIT 0,1
 

Полычь

Guest
SELECT * FROM `bd` WHERE `checked`="none" ORDER BY RAND() LIMIT 0,1;

НО работает нестабильно !

IntenT - :) пока писал - ты уже запостил ;)
 

Фанат

oncle terrible
Команда форума
IntenT, это не бред, а более производительный вариант, чемORDER BY RAND()

Полычь, и в чем выражается эта нестабильность?


Camillo, а никто ДОСЛОВНО тебе и не велел передирать.
посмотрев на этот код, надо включать, хоть иногда, собственную голову.
Если есть.
примеры пишутся для людей, которые, как предполагается, умеют достать поле из базы данных.
И дописать аод получения самостоятельно.
Если ты не спопсобен произвести такую операцию, то иди учи азы работы с базами данных. когда освоишь - поймешь, как применить пример, который тебе дали
 

SiMM

Новичок
> Решение вообще-то в 1запрос
Во-первых, это решение заведомо медленнее, во-вторых - оно не всегда работает.
 

Полычь

Guest
Фанат
Полычь, и в чем выражается эта нестабильность?
Я неправильно выразился - не нестабильность а при большом количестве запросов к странице наблюдается проседание базы :(
 
Сверху