Есть обычный запрос типа: Код (Text): $result = $db->sql_query("SELECT lid, cid, title, date, description FROM ".$prefix."_board WHERE status='1' AND vip='1' AND cid='1' ORDER BY lid DESC LIMIT 5"); Суть, нужно выводить не по порядка к примеру 5,4,3,2,1 , а хаотично тоесть 4,1,3,5,2, иными словами каждый раз случайный вывод.
Пора в отдельную тему выносить объявление - "Если вы хотите вывдоить данные из базы в случайном порядке, пользуйтесь ORDER BY RAND()" =)
Гы, сталкнулся с интересной вещью Запрос [sql]SELECT `text` FROM `base` ORDER BY RAND( ) LIMIT 1[/sql] Результат И это при сравнительно не большой базе (48 тысяч записей) Структура базы [sql]CREATE TABLE `base` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `text` varchar(2048) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=48614 ;[/sql] Есть идеи ?
а если так? [sql]SELECT `text` FROM `base` where `id`>=rand(select max(id) from `base`) LIMIT 1[/sql]
Так оно и не должно заработать... Как "костыль" можно попробовать так [sql]SELECT `text` FROM `base` where `id` >= CEIL(RAND() * (SELECT MAX(`id`) FROM `base`)) LIMIT 1[/sql] Но больше интересует почему тормозит "простой" вариант.
Vladson, у меня смутное подозрение, что [sql]SELECT `id`,`text` FROM `base` ORDER BY RAND( ) LIMIT 1[/sql] будет несколько быстрее?
а ты уверен что он тормозит? при работе с дисковыми операциями интерпретатор слишком оптимизирует, возможно даже очередность выполнения, он может и -20 сек показать. зы не перебрал с экономией?
Предлагаю сделать в каждой ветке форума прикрепленную тему, что то типа FAQа. Ведь про SELECT * FROM table ORDER BY RAND() уже несколько тем создано. Да и по другим вопросам тоже.
Горбунов Олег ноль разницы Я уверен что запрос, вот только почему не знаю (настройки MySQL все дефолтные) Там такие данные что их не может быть больше 65тыс но это оф-топ не знаю, в поиске нашёл только эту но это оф-топ
http://www.php.su/forum/printpage.php?forum=1&topic=222 $maxid=48000; // show table status $rid=rand(1,$maxid); $sql="select text from base where id<".$rid." order by id desc limit 1"; не совсем рендом, т.к. в таблице может быть autoincrement=200k и ид от 100к http://newcontinent.ru/h/mysqlc/06.htm Собственно, он вычисляет rand() для каждой записи и потом смотрит что меньше. но все равно 20 сек - это глюк отображения. Если не на п1 запускать. Какой объем таблицы в метрах?
$rid=rand(1,$numrows); $sql="select text from base order by id asc limit ".$rid.",1"; Вопрос: Как выбрать 20 случайных записей?
Vladson, судя по всему мускул создаёт временную таблицу куда в случайном порядке копирует данные из исходной. а потом берёт первое значение... жэсть при запросе винч не шуршит случаем как бешенный?