$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, самый быстрый рандомный запрос - это рандом по первичному ключу, где только он извлекается из таблицы. И вот тут человек уже боролся с подобной проблемой. Интересное для ТС решение:
Боюсь, средствами MySQL быстрее рандомной выборки не сделать.

http://phpforum.ru/index.php?act=Search&CO...s&highlite=rand
SELECT * FROM Table T JOIN (SELECT CEIL(MAX(ID)*RAND()) AS ID FROM Table) AS x ON T.ID >= x.ID LIMIT 1;
Боюсь, средствами MySQL быстрее рандомной выборки не сделать.

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)
и уже в запросе
это как вариант реализации
подсчитать количество строк в базе, сгенерировать случайное число (от 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 секунд.
тогда можно в три этапа:
1. сначала находим общее количество записей через COUNT();
2. генерируем случайное число от 0 до максимального;
3. запрос к базе с припиской LIMIT наше _сл_число, 1.

тогда можно в три этапа:
1. сначала находим общее количество записей через COUNT();
2. генерируем случайное число от 0 до максимального;
3. запрос к базе с припиской LIMIT наше _сл_число, 1.
Спустя 5 минут, 20 секунд (17.03.2010 - 09:03) sergeiss написал(а):
Тему перенес в PHP+SQL.
А автору темы вопрос: зачем надо было указывать в вопросе mysql_fetch_assoc, echo? К проблеме они отношения не имеют, а только отвлекают внимание.
Это не ошибка, естественно
Но при задании вопроса лучше как можно четче его формулировать. Такие "тонкости", как показ только важного для этого вопроса, весьма важны.
А автору темы вопрос: зачем надо было указывать в вопросе mysql_fetch_assoc, echo? К проблеме они отношения не имеют, а только отвлекают внимание.
Это не ошибка, естественно

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

я первый способ (
с ORDER BY RAND() LIMIT 1) использовал для табла где 3000 записи, работает в мгновение.....
Спустя 14 минут, 14 секунд (17.03.2010 - 15:03) qpayct написал(а):
Игорь_Vasinsky
кстати в некоторых случаях так быстрее чем посредствами мускла
кстати в некоторых случаях так быстрее чем посредствами мускла
