Forum Webscript.Ru
Программирование => PHP => Тема начата: Antosha от 04 Ноября 2004, 15:38:49
-
Люди, кто знает, как лучше на PHP реализовать выборку случайной строки из таблицы mysql, не зависимо от структуры таблицы.
-
для начала можно ORDER BY RAND(), хотя работает довольно странно
и пхп тут абсолютно ни при чем
-
сделал запрос SELECT * FROM blabla ORDER BY RAND(); и как результат он мне вывел все содержимое таблицы(или почти все, таблица очень большая)
-
Antosha
ты именно этого и хотел.
теперь можешь радоваться.
-
Блин, извините, ступил... Мне надо выбрать одну строку.
-
за количество строк отвечает оператор LIMIT
-
SELECT * FROM blabla ORDER BY RAND() LIMIT 1;
-
бАльшое спасибА!!!
-
А когда присутсвует в запросе WHERE странно работает, постоянно одно и тоже значение ... вот такой запрос
SELECT *
FROM `table`
WHERE col >0 AND
TYPE =1 AND
idsquare!=2
ORDER BY RAND()
LIMIT 1
Всегда дает один и тот же результат.
-
А то же самое без LIMIT 1 сколько строк даст?
-
Выбирает строки по условию но порядок строк всегда один и тот же .. В этом вся загвозка, когда делаешь просто SELECT * FROM table ORDER BY RAND() LIMIT 1 - то, да. Выборка случайно идет. Но когда вклиниваешь условия, то результат постоянный. Пока не знаю в чем причина.
-
чем полдня ждать ответа, поискал бы в Гугле, там достаточно примеров кто и как это решал
-
Интересно вот что ... когда использовал вот такую конструкцию, то процес, как говориться, пошел ...
SELECT *,(RAND()*100) AS rnd
FROM `table`
WHERE col >0 AND
TYPE =1 AND
idsquare!=2
ORDER BY rnd
LIMIT 1
В итоге выборка пошла случайно. Если убрать из SELECT где мы выбираем (RAND()*100) AS rnd то снова получаем один и тот же порядок, точнее запись будет выпадать одна и та же ...
Хотя заметил, что псевдослучайность тут тоже не ахти какая. Очень часто выпадает первая запись, даже чаще чем другие.
Так что вопрос о выборке из базы случайно остается открытым.
-
Сам Man MySQL не рекомендует использовать RAND() таким образом: Оператор RAND() не следует воспринимать как полноценный генератор случайных чисел: это просто быстрый способ динамической генерации случайных чисел, переносимых между платформами для одной и той же версии MySQL.
В качестве альтернативы можно, если заранее знаешь кол-во строк в таблице, генерировать случайное число в скрипте, а потом подставлять его в LIMIT N, 1
-
select count(*) from table
$rnd=rand(0,$total);
select * from table limit $rnd,1
-
подскажите где ошибка ?
$q = db_query (\'SELECT COUNT(*) FROM \'.NEWS_TABLE.\';\') or die (db_error());
$row_count = db_fetch_row($q);
$query = array();
while (count($query) < 1)
{
$query []= \'SELECT title, text, date, brief, Pict, enable, meta_title, meta_keywords, meta_desc, hurl, canonical FROM \'.
NEWS_TABLE.\' LIMIT \'.rand( 0,$row_count[0]).\', 1;\';
}
$query = implode(\' UNION \', $query);
//echo "
---------------".$query ."
";
$q = db_query ($query) or die (db_error());
$sinonim_news=array(); $i=0;
while ($res=mysql_fetch_row($q))
{
$sinonim_news[$i] = $res;
$i++;
}
_
неработает
-
Функцией rand() формируешь id и выводишь случайно.
-
Тоже не работает ((