![]() |
Показаны 15 сообщений на этой странице |
Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- генератор случайных чисел (http://netadmin.ws/forum/showthread.php?threadid=6516)
генератор случайных чисел
Очень интересует как можно на php реализовать наиболее приближенный к истинно случайному генератор случайных чисел (X их X). Важно, чтобы выдавал результаты равномерно распределенные.
Стандартные методы не подходят, насколько слышал в них нет истинной случайности.
__________________
tosha
rand плюс на time() поделить на айпи клиента умножить на другой rand. С пивом потянет 
__________________
Типа спициялист по елехтронной комэрцыи. Крут не по децки.
При чем тут умножить и поделить.
__________________
tosha
Для пущей рандомности.
__________________
Типа спициялист по елехтронной комэрцыи. Крут не по децки.
Так числа то нужны из определенного массива, к примеру 5 чисел от 1 до 20.
Если их умножать и делить массив, что получится...
__________________
tosha
tosharu
А чем тебе для этого mt_rand () не подходит?
Создаёшь массив, заполняешь числами, потом выбираешь с помощью mt_rand ()...
__________________
f9ffe3323e79b2a558b92af5b4039e20
у меня такая же трабла, только мне нужно по id выбрать случ. запись из таблицы, а ведь там могут быть пробелы... типа 1,2,4,10 ...
$show->max_nom('miss')=SELECT COUNT(*) FROM miss_list;
mt_rand(1, $show->max_nom('miss'));
__________________
Админ - вождь Апачей...
подсчитываешь колво в таблице ($total);
$num = mt_rand(0, ($total-1));
в SELECT используешь LIMIT $num,1
__________________
Всегда есть решение.
polo хм.. может не понял (я), но не проканает:
1, 100, 150, 151-200 => $total=52 (кажись)
=> $num = mt_rand(0, (52-1));
от 0 до 51 И? А циферки 100, 150-200???
__________________
Админ - вождь Апачей...
Читай про LIMIT в доках по мускулю.
__________________
Всегда есть решение.
polo ну... и?.. мне легче не стало
quote:
Выражение LIMIT может использоваться для ограничения количества строк, возвращенных командой SELECT. LIMIT принимает один или два числовых аргумента. Ð_ти аргументы должны быть целочисленными константами. Если заданы два аргумента, то первый указывает на начало первой возвращаемой строки, а второй задает максимальное количество возвращаемых строк. При этом смещение начальной строки равно 0 (не 1):
mysql> SELECT * FROM table LIMIT 5,10; # возвращает строки 6-15
Если задан один аргумент, то он показывает максимальное количество возвращаемых строк:
mysql> SELECT * FROM table LIMIT 5; # возвращает первых 5 строк
Другими словами, LIMIT n эквивалентно LIMIT 0,n.
Ну вот! Уже много лучше! Пасиба за помощь!
__________________
Админ - вождь Апачей...
Так и не понял разобрался ты или нет, но:
Принцип прост, подсчитывается кол-во записей в таблице, получается случайная запись в диапазоне от 0 до кол-во записей -1 (думаю понятно почему), выбирается запись с оффсетом полученным выше в кол-ве одна штука. Может есть и другой метод, но мне он к сожалению не известен.
__________________
Всегда есть решение.
polo если он будет выводить номер строки просто "по порядку" без учёта id то да, разобрался.
Пасибо БААААЛЬШОЕ! 
__________________
Админ - вождь Апачей...
quote:
Первоначальное сообщение от Andrej
tosharu
А чем тебе для этого mt_rand () не подходит?
Создаёшь массив, заполняешь числами, потом выбираешь с помощью mt_rand ()...
__________________
tosha
polo с какой-то mysql 3.23 можно ... ORDER BY RAND() LIMIT n -- n записей в случайном порядке. По идее, должно быть быстрее, чем вариант с двумя запросами..
| Формат времени GMT. Текущее время 07:18. | Показаны 15 сообщений на этой странице |
Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.