|
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, время: 12:31. |
|