Тема: Случайная запись из Mysql (WAP/WEB мастеру/PHP/MySQL) scpasis13 (14 Apr 2015 в 14:16) RANG() В ЗАПРОСЕ ПОСТВАВЬ Twipas (14 Apr 2015 в 14:20) --Цитата-- scpasis13 (14 Apr 2015 в 14:16): RANG() В ЗАПРОСЕ ПОСТВАВЬ ---------- scpasis13, куда именно поставить, хочу вот вывод дневников sys/inc/main_notes.php куда тут это вставить? <? $q=mysql_query(\"SELECT * FROM `notes` ORDER BY `time` DESC LIMIT 3\"); if(mysql_num_rows($q)==0){ ?><?php }else{ while($post=mysql_fetch_assoc($q)){ $note_name = \'\'.text($post[\'name\']).\'\'; $note_text =$post[\'msg\']; $count_comm =mysql_result(mysql_query(\"SELECT COUNT(`id`) FROM `notes_komm` WHERE `id_notes`=\'\".$post[\'id\'].\"\'\"),0); echo \"<div class=\'mess\'>n\"; ?><??><?=$note_name;?> <?=rez_text($note_text,70);?><br/><?php ?> <?php echo \'<a href=\"/pages/tales/list.php?id=\'.$post[\'id\'].\'\">Перейти &rarr;</a></div>\'; } } ?><? vityachis (14 Apr 2015 в 14:35) думаю хватит того, что бы убрать сортировку по времени, тогда оно должно выдавать случайный. В запросе (2 строчка), удали: ORDER BY `time` DESC scpasis13 (14 Apr 2015 в 14:36) q=mysql_query(\"SELECT * FROM `notes` ORDER BY RANG() LIMIT 3\"); ВРОДЕ ТАК ПОПРОБУЙ Twipas (14 Apr 2015 в 14:42) vityachis, во только он не меняет их при обновлении стр. vityachis (14 Apr 2015 в 14:42) --Цитата-- scpasis13 (14 Apr 2015 в 14:36): q=mysql_query(\"SELECT * FROM `notes` ORDER BY RANG() LIMIT 3\"); ВРОДЕ ТАК ПОПРОБУЙ ---------- scpasis13, rang() есть в пхп, но не в мускуле и еще он выдыет случайное число, в твоем запросе ты хочешь сортировать таблицы перед выводом по случайному числу... Это бред) Twipas (14 Apr 2015 в 14:43) scpasis13, ноги пропали. Twipas (14 Apr 2015 в 14:46) vityachis, кстати он вывел первые 3 дневника. Engine (14 Apr 2015 в 14:47) scpasis13, вообще то rand() vityachis (14 Apr 2015 в 14:47) тогда нужно сначала получить количество всех записей, а потом выбрать из этих числ случайное (или случайные если несколько), и потом выбрать дневники по ид) Twipas (14 Apr 2015 в 14:53) --Цитата-- vityachis (14 Apr 2015 в 14:47): тогда нужно сначала получить количество всех записей, а потом выбрать из этих числ случайное (или случайные если несколько), и потом выбрать дневники по ид) ---------- vityachis, во задача то :D vityachis (14 Apr 2015 в 14:55) Twipas, ну эт как вариант) может кто лучше предложит) просто немного занят с другим, так бы именно код написал) Engine (14 Apr 2015 в 14:55) vityachis, А если некоторые дневники удалены? :) тогда какого то ид не будет, но скрипт попытается его выбрать vityachis (14 Apr 2015 в 14:56) Engine, ну везде баги бывают) vityachis (14 Apr 2015 в 14:58) Engine, тогда нужно также проверить если дневник удален, тогда заново брать случайное ид дневника) Twipas (14 Apr 2015 в 15:01) vityachis, понятно). scpasis13 (14 Apr 2015 в 15:11) --Цитата-- Engine (14 Apr 2015 в 14:47): scpasis13, вообще то rand() ---------- Engine, ошибся Optimuses (14 Apr 2015 в 17:04) <?php $query = mysql_query(\"SELECT * FROM `notes` ORDER BY rand() LIMIT 1\"); while ($post = mysql_fetch_assoc($query)) { echo \'<a href=\"/plugins/notes/list.php?id=\'.$post[\'id\'].\'\"> <b>\'.text($post[\'name\']).\'</b> </a>\'; } ?> Twipas (14 Apr 2015 в 19:30) Optimuses, спасибо, то что надо.) biket (26 Apr 2015 в 01:29) Rand в mysql очень медленный способ. Лучше использовать другие варианты. Например, сначала получить общее количество записей, а потом выбрать случайное число с помощь php. SakamskY (26 Apr 2015 в 04:58) --Цитата-- biket (26 Apr 2015 в 01:29): Rand в mysql очень медленный способ. Лучше использовать другие варианты. Например, сначала получить общее количество записей, а потом выбрать случайное число с помощь php. ---------- biket, я с тобой не согласен. А если той записи, которая выпадет в рандоме, не будет существовать (удалена)? Придется выбирать заново, но где гарантия, что опять не выпадет число, записи которой в базе нет? Опять придется через рандом на php. А что если таких записей, который не существует, много? rand() в mysql выбирает рандомно из существующих записей из таблицы. В данном случае с rand() будет значительнее быстрее :) ------------------ А если там записи с идентификаторами, начиная от 50 к примеру и до 60, но при этом нету 53, 56, 59 А скрипт будет выбирать от 1-7. Вообще возникнет циклическая ошибка. biket (26 Apr 2015 в 05:04) SakamskY, Первым запросом получить массив id записей, а затем выбрать случайный элемент из массива. Кредитор (26 Apr 2015 в 15:19) --Цитата-- biket (26 Apr 2015 в 01:29): Rand в mysql очень медленный способ. Лучше использовать другие варианты. Например, сначала получить общее количество записей, а потом выбрать случайное число с помощь php. ---------- biket, поддержу. но есть способы оптимизации рандомной выборки запросом Engine (26 Apr 2015 в 15:39) SakamskY, На такой случай в pdo есть метод fetchAll. Он выбирает абсолютно все записи по условию в один массив. Далее из этого массива можно получить количество ключей и выбрать случайную запись. Все делается одним запросом Источник: http://www.dcms-social.ru/forum/20/41/58640/