Gvozd,
да я и не спорю про эффективность. Что может быть шустрее, чем выборка двух значений по полю-индексу? (Более того, поколдовал я и так и сяк, и с JOIN и с "LIMIT {random}, 1", при нескольких тысячах строк результаты ужасают.) Просто тогда надо быть очень внимательным и держать id в чистоте и порядке. Да, и багрепорт, видимо, проигнорировали. // допустим, $kol = 1; $rnd = rand(1, $kol); // 1, всегда while( ($rnd2 = rand(1, $kol)) ==$rnd); // бесконечный цикл |
Цитата:
Цитата:
так что это скорее вопрос уже формализации Цитата:
$rnd = rand(1, $kol); $db1 = mysql_fetch_assoc(mysql_query("SELECT * FROM writers ORDER BY id LIMIT ".$rnd.",1")); если я правильно предполагаю, то такой запрос должен отрабатыватся за логарифм, также как и получение по id |
Сообщение не дошло (долбаный MTS!).
Лениво переписывать тираду, да и не вспомню уже, вкратце, проверил на живом сервере, а не дома на денвере, и метод с LIMIT оказался действительно неплох (0,02 с для 36000 строк). Вот, только с ORDER BY он работает на порядок медленнее, действительно ли он нужен, учитывая, что порядок строк нам не особо-то и нужен. |
Цитата:
Цитата:
|
Теперь нужно три картинки выводить...три юзера. Как в этом случае сделать? так while ((($rnd3=rand(1, $db1n))==$rnd)==$rnd2); не работает(
<?php mysql_connect($hostddd, $userdbddd, $passdbddd); mysql_select_db($databaseddd); $db1n = mysql_num_rows(mysql_query("SELECT * FROM writers")); $rnd = rand(1, $db1n); $db1 = mysql_fetch_assoc(mysql_query("SELECT * FROM writers WHERE id='".$rnd."'")); $wri = "<a href='index.php?option=com_content&view=article&id=48#".$db1['id']."'> <img src='http://localhost/writers/".$db1['photo']."'></img></a> <br> <b>".$db1['name']."</b><br><span style='font-size: 11px'>Age: ".$db1['age']."</span> <br><span style='font-size: 11px'>Country of Residence: ".$db1['country']."</span> <br><span style='font-size: 11px'>Degree: ".$db1['degree']."</span><br><br>"; while (($rnd2=rand(1, $db1n))==$rnd); $db2 = mysql_fetch_assoc(mysql_query("SELECT * FROM writers WHERE id='".$rnd2."'")); $wri2 = "<a href='index.php?option=com_content&view=article&id=48#".$db2['id']."'> <img src='http://localhost/writers/".$db2['photo']."'></img></a> <br> <b>".$db2['name']."</b><br><span style='font-size: 11px'>Age: ".$db2['age']."</span> <br><span style='font-size: 11px'>Country of Residence: ".$db2['country']."</span> <br><span style='font-size: 11px'>Degree: ".$db2['degree']."</span><br><br>"; echo "<br>".$wri.$wri2; ?> |
$max=100; $count=10; $rand=array();$temp_rand=NULL; for($i=0;$i<$count;$i++) { while(in_array($temp_rand=rand(1,$max),$rand)); $rand[$i]=$temp_rand; } |
$max=100; $count=10; $rand = array(); for ($i = 0; $i < $count; $i++) { $rand[$i] = rand(1, $max - $i); for ($j = 0; $j < $i; $j++) { if ($rand[$i] >= $rand[$j]) { $rand[$i]++; } } } $count равномерно распределённых случайных чисел. |
Kolyaj,
обоснуй не очень-то похоже, что это будет равномерная выборка более того, она и вправду неравномерная для выборки 3х элементов из 4х, оно дает: 7 перестановок "123" 5 перестановок "124" |
Не могу вьехать как его влепить туда....пожалуйста, можно на моем примере?
|
Цитата:
код, не такой уж сложный, и полагаю без комментариев должно быть ясно что он делает, и как использовать его результат |
Часовой пояс GMT +3, время: 05:25. |