|
rand в php два рендома друг с другом связаны
Как сделать так, чтобы $rnd2 не учитывало $rnd? Тоесть чтобы $rnd никогда не было равно $rnd2.:blink:
$kol = mysql_num_rows(mysql_query("SELECT * FROM writers"));
$rnd = rand(1, $kol);
$db1 = mysql_fetch_assoc(mysql_query("SELECT * FROM writers WHERE id='".$rnd."'"));
$rnd2 = rand(1, $kol);
$db2 = mysql_fetch_assoc(mysql_query("SELECT * FROM writers WHERE id='".$rnd2."'"));
|
да тысяча способов.
while( ($rnd2 = rand(1, $kol)) ==$rnd); |
Гхм… Если Вам нужно две различные случайные строки из таблицы, то так и составляйте запрос:
Код:
SELECT * FROM `writers` ORDER BY RAND() LIMIT 2 |
subzey,
вы в своем уме? сложность вычислений при таком запросе O(N*lg(N)) и все это ради двух строчек. В то время, как способ Jekel делает это за O(lg(N)) Разницу чуствуете? PS Вспомнилось |
Gvozd,
вроде, пока да. На стенде, может, это и работает лучше, но как насчет практики? Авторы никогда не будут удаляться? id всегда-всегда будут идти строго по порядку, а обоспечивать это будут триггеры, или «ручка слива»? А что, если запись будет всего одна? while( ($rnd2 = rand(1, 1)) ==$rnd); |
спасибо, while (($rnd2=rand(1, $db1n))==$rnd){} работает)
|
Цитата:
Цитата:
если хотите я могу протестировать насколько именно и опубликовать результаты |
А зачем три запроса к одной траблице, когда в результате первого запроса уже все есть?
$res = mysql_query("SELECT * FROM writers"); // как ни крути, тяжеллый запрос
$res_length = mysql_num_rows($res);
$entries = array();
$i = 1;
$rnd1 = rand(1, $res_length);
while( ($rnd2 = rand(1, $res_length)) == $rnd1);
while($row = mysql_fetch_assoc($res)){
if($i == $rnd1) $entries[0] = $row;
if($i == $rnd2) $entries[1] = $row;
$i++;
if(count($entries) == 2) break;
}
|
Цитата:
B@rmaley.e><e, купить торт и съесть только вишенку. Тоже вариант, только, наверное, вместо while по mysql_fetch_assoc() — mysql_data_seek(). |
Цитата:
к сожалению, все известные мне решения на чистом MySQL весьма и весьма непродуктивны. например ваше решение, как раз и есть то, за что вы осуждаете других Цитата:
|
| Часовой пояс GMT +3, время: 21:32. |
|