Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   PHP (http://www.flasher.ru/forum/forumdisplay.php?f=20)
-   -   Random query? (http://www.flasher.ru/forum/showthread.php?t=51238)

silgd 10.11.2003 01:52

Random query?
 
Подсакажите как сделать рандом запрос.

PHP код:

$result mysql_query("SELECT * FROM travel WHERE recommended='1' ORDER BY RAND() LIMIT 1"); 

Только без RAND(), с ним Bug в mysql 3.23.53,
я пытаюсь выбрать одну строку в рандомальном порядке где recommended='1', как ето можно вычеслить на PHP?
Без использования RANDOM().

kompadre 10.11.2003 02:20

Выбрать твою квери и в пхп и сделать rand(0, $max), прежде не забыв "рандомизировать" с помощью srand() ($max в ранде должен равнятся mysql_num_rows() твоего кверя).
Дальше - mysql_data_seek к получившимуся ранду...

Кстати, почему бы не актуализировать заведомо глючный мускул?

silgd 10.11.2003 02:36

Ты бы не мог на примере ето показать?
//please

kompadre 10.11.2003 03:22

$sql_q = "SELECT * FROM travel WHERE recommended='1' "
$qw = mysql_db_query($db, $sql_q);
$max = mysql_num_rows($qw);
$random_q = random(0, $max);
mysql_db_seek($qw, $random);
// dalshe delayesh mysql_result i vse chto tebe nado

function random ($min, $max) {
list($usec, $sec) = explode(' ', microtime());
$rand_t = $sec + ((float) $usec * 100000);
srand($rand_t);
return rand($min, $max);
}

Crazy 10.11.2003 09:32

Ужас какой... Тянуть из базы туеву хучу строк, чтобы выбрать одну. Кто-то из мудрых советовал так:

Код:

select rand()+0 as r, .... from ... where ... order by 1 limit 1
Это работает даже в MySQL с глюком оптимизатора...

kompadre 10.11.2003 22:19

Мдя, быть может тоже правда. Хотя в принципе то order by rand тоже присутвует. Да и ху*ву тучу строк из базы тянуть не обязательно.

Запрос увесистый получается? Вопрос правильной организации данных (и конечно - качественого администрирования и апдейта мускула).

Вот что странно : этот глюк касается только виндовозкого мускула (http://groups.google.com/groups?q=my....edu.tw&rnum=2) . Очень сомниваюсь что-бы на хостинге автора стоял Windows + Mysql . То есь на локалхосте проблемма? Почему бы его не обновить на более стабильную версию ?

silgd 11.11.2003 00:29

//

RAND() не отзывается хоть как на mysql 3.23.xx
точно ты заметил что Bug только на Windows

Cделал Upgrate to mysql 4.0.16 и всё ok, rand() работает как следует.

nagash 11.11.2003 00:38

а в мануале советуют MD5(RAND()) - я так пробовал...
работало...

silgd 11.11.2003 01:07

Оно так типа лучше рандомируется если с MD5? :)

Мне нужно что бы на заглавной странитце при загрузке поевлялось ADV, поетому нужен хороший рандомайзер.

Crazy 11.11.2003 01:36

Цитата:

Оригинал написал(а) silgd
Оно так типа лучше рандомируется если с MD5? :)
Это другой -- более дорогой -- способ подавить оптимизатор. Эффект тот же, что и от умножения на 1 или от добавления 0: оптимизатор видит, что это ВЫРАЖЕНИЕ и считает, что оно может быть различным для разных строк. В некоторых версиях, если мне память не изменяет, нужно использовать в выражении какое-нибудь поле. Типа такого: rand()+x*0.

P.S. В версии 3.23.XX нет никакого глюка с rand. Там есть глюк с оптимизатором запросов.


Часовой пояс GMT +4, время: 09:12.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.