Forum Webscript.Ru

Программирование => PHP => Тема начата: Antosha от 04 Ноября 2004, 15:38:49

Название: случайная выборка из mysql
Отправлено: Antosha от 04 Ноября 2004, 15:38:49
Люди, кто знает, как лучше на PHP реализовать выборку случайной строки из таблицы mysql, не зависимо от структуры таблицы.
Название: случайная выборка из mysql
Отправлено: Daiz13 от 04 Ноября 2004, 16:00:42
для начала можно ORDER BY RAND(), хотя работает довольно странно

и пхп тут абсолютно ни при чем
Название: случайная выборка из mysql
Отправлено: Antosha от 04 Ноября 2004, 16:22:09
сделал запрос SELECT * FROM blabla ORDER BY RAND(); и как результат он мне вывел все содержимое таблицы(или почти все, таблица очень большая)
Название: случайная выборка из mysql
Отправлено: Меняздесьдавнонет от 04 Ноября 2004, 16:36:09
Antosha
ты именно этого и хотел.
теперь можешь радоваться.
Название: случайная выборка из mysql
Отправлено: Antosha от 04 Ноября 2004, 16:48:27
Блин, извините, ступил... Мне надо выбрать одну строку.
Название: случайная выборка из mysql
Отправлено: Меняздесьдавнонет от 04 Ноября 2004, 16:55:22
за количество строк отвечает оператор LIMIT
Название: случайная выборка из mysql
Отправлено: Forza от 04 Ноября 2004, 16:57:06
SELECT * FROM blabla ORDER BY RAND() LIMIT 1;
Название: случайная выборка из mysql
Отправлено: Antosha от 04 Ноября 2004, 17:03:20
бАльшое спасибА!!!
Название: случайная выборка из mysql
Отправлено: mymind от 05 Ноября 2004, 11:54:07
А когда присутсвует в запросе WHERE странно работает, постоянно одно и тоже значение ... вот такой запрос

SELECT  *
FROM  `table`
WHERE col >0 AND
TYPE =1 AND
idsquare!=2
ORDER  BY RAND()
LIMIT 1

Всегда дает один и тот же результат.
Название: случайная выборка из mysql
Отправлено: Forza от 05 Ноября 2004, 13:23:03
А то же самое без LIMIT 1 сколько строк даст?
Название: случайная выборка из mysql
Отправлено: mymind от 05 Ноября 2004, 13:49:22
Выбирает строки по условию но порядок строк всегда один и тот же .. В этом вся загвозка, когда делаешь просто SELECT * FROM table ORDER BY RAND() LIMIT 1 - то, да. Выборка случайно идет. Но когда вклиниваешь условия, то результат постоянный. Пока не знаю в чем причина.
Название: случайная выборка из mysql
Отправлено: Daiz13 от 05 Ноября 2004, 17:55:17
чем полдня ждать ответа, поискал бы в Гугле, там достаточно примеров кто и как это решал
Название: случайная выборка из mysql
Отправлено: mymind от 06 Ноября 2004, 04:47:53
Интересно вот что ... когда использовал вот такую конструкцию, то процес, как говориться, пошел ...
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 то снова получаем один и тот же порядок, точнее запись будет выпадать одна и та же ...
Хотя заметил, что псевдослучайность тут тоже не ахти какая. Очень часто выпадает первая запись, даже чаще чем другие.

Так что вопрос о выборке из базы случайно остается открытым.
Название: случайная выборка из mysql
Отправлено: Forza от 06 Ноября 2004, 12:00:16
Сам Man MySQL не рекомендует использовать RAND() таким образом: Оператор RAND() не следует воспринимать как полноценный генератор случайных чисел: это просто быстрый способ динамической генерации случайных чисел, переносимых между платформами для одной и той же версии MySQL.
В качестве альтернативы можно, если заранее знаешь кол-во строк в таблице, генерировать случайное число в скрипте, а потом подставлять его в LIMIT N, 1
Название: случайная выборка из mysql
Отправлено: Меняздесьдавнонет от 06 Ноября 2004, 12:02:33
select count(*) from table
$rnd=rand(0,$total);
select * from table limit $rnd,1
Название: случайная выборка из mysql
Отправлено: информации от 16 Января 2011, 04:41:50
подскажите где ошибка ?


  $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++;
    }



_
неработает
Название: случайная выборка из mysql
Отправлено: Санчис от 22 Июня 2011, 10:54:11
Функцией rand() формируешь id и выводишь случайно.
Название: случайная выборка из mysql
Отправлено: Alexss от 22 Сентября 2011, 05:56:13
Тоже не работает ((