[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Функция rand ()
shmit
Здравствуйте, помгите вывести имя рандомно, читал в гугле там везде одно и тоже толком обьяснений нету(((

$result=mysql_query ("SELECT 'name' FROM users WHERE username='$username'");
$myrow= mysql_fetch_assoc($result);
echo $myrow ['name'];


куда здесь подставить функцию rand (), чтобы имя выводилось из базы рандомом, спасибо.



Спустя 20 минут, 51 секунда (17.03.2010 - 04:27) qpayct написал(а):
Вообще из того, как работает random на MySQL, самый быстрый рандомный запрос - это рандом по первичному ключу, где только он извлекается из таблицы. И вот тут человек уже боролся с подобной проблемой. Интересное для ТС решение:
SELECT * FROM Table T JOIN (SELECT CEIL(MAX(ID)*RAND()) AS ID FROM Table) AS x ON T.ID >= x.ID LIMIT 1;

Боюсь, средствами MySQL быстрее рандомной выборки не сделать.
user posted image
http://phpforum.ru/index.php?act=Search&CO...s&highlite=rand

Спустя 28 минут, 59 секунд (17.03.2010 - 04:56) shmit написал(а):
Благодарю

Спустя 1 час, 58 минут, 59 секунд (17.03.2010 - 06:55) Игорь_Vasinsky написал(а):
а можно было по ID типа:

подсчитать количество строк в базе, сгенерировать случайное число (от 0 да max)

и уже в запросе
 WHERE `id` = '".$rand_id."';

это как вариант реализации


Спустя 1 час, 26 минут, 40 секунд (17.03.2010 - 08:22) maxims написал(а):
Цитата (Игорь_Vasinsky @ 17.03.2010 - 03:55)
а можно было по ID типа:

подсчитать количество строк в базе, сгенерировать случайное число (от 0 да max)

и уже в запросе
 WHERE `id` = '".$rand_id."';

это как вариант реализации

А если нет такого id? Например в базе 1,2,3,4,10,11....
Я использую простой запрос с сортировкой в случайном порядке
ORDER BY RAND() LIMIT 1;

Для shmit это будет:
$result=mysql_query ("SELECT 'name' FROM users WHERE username='$username' ORDER BY RAND() LIMIT 1;");
$myrow= mysql_fetch_assoc($result);
echo $myrow ['name'];

Спустя 19 минут, 31 секунда (17.03.2010 - 08:41) phz написал(а):
При большом объеме таблицы ORDER BY RAND() будет долго выбирать

Спустя 16 минут, 46 секунд (17.03.2010 - 08:58) maxims написал(а):
и в правду для 967376 записей это составляет около 13 секунд. smile.gif
тогда можно в три этапа:
1. сначала находим общее количество записей через COUNT();
2. генерируем случайное число от 0 до максимального;
3. запрос к базе с припиской LIMIT наше _сл_число, 1.

Спустя 5 минут, 20 секунд (17.03.2010 - 09:03) sergeiss написал(а):
Тему перенес в PHP+SQL.

А автору темы вопрос: зачем надо было указывать в вопросе mysql_fetch_assoc, echo? К проблеме они отношения не имеют, а только отвлекают внимание.

Это не ошибка, естественно smile.gif Но при задании вопроса лучше как можно четче его формулировать. Такие "тонкости", как показ только важного для этого вопроса, весьма важны.

Спустя 5 часов, 39 минут, 15 секунд (17.03.2010 - 14:43) shmit написал(а):
Ок, в следующий раз буду яснее выражаться, спасибо за помощь, для 1000 записей не будет оно думать 5 сек.?)

Спустя 5 минут, 48 секунд (17.03.2010 - 14:48) maxims написал(а):
попробуйте..... biggrin.gif

я первый способ (
с ORDER BY RAND() LIMIT 1
) использовал для табла где 3000 записи, работает в мгновение.....

Спустя 14 минут, 14 секунд (17.03.2010 - 15:03) qpayct написал(а):
Игорь_Vasinsky
кстати в некоторых случаях так быстрее чем посредствами мускла sad.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.