[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: rand()
Страницы: 1, 2
denlam
Вообще проблема такая. В базе данных строки хранятся не по порядку, а что-то типа 5, 15,77 и так далее.
А мне нужно чтобы php обращался к БД, выбирал одну из строк и выдавал.
Какие есть идеи?
vagrand
select * from table_name order by rand()

Но это не самый быстрый запрос

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
denlam
а еще есть варианты?
vagrand
а по сколько строк тебе надо выбирать за раз?

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
denlam
только одну строку выбрать
MatrixGod
$x = rand(1, 3);
switch($x)
{
case 1 : $row = 5; break;
case 2 : $row = 15; break;
case 3 : $row = 77; break;
}


так?
maxims
Цитата (MatrixGod @ 18.04.2010 - 22:43)
$x = rand(1, 3);
switch($x)
{
case 1 : $row = 5; break;
case 2 : $row = 15; break;
case 3 : $row = 77; break;
}


так?

а если у него не три записи, а 1000000?

можно так:
1. сначала находим общее количество записей через COUNT();
2. генерируем случайное число от 0 до максимального;
3. запрос к базе с припиской LIMIT наше _сл_число, 1.

при этом мы не привязаны к какимто значениям в таблице.

з.ы.: думаю можно всё три действия сунуть в один запрос, на работе попрубую, позже отпишусь wink.gif
kirik
1 вариант - как предложил vagrand, если сайт не нагруженный.
2 вариант - кэшировать id записей и:
$entries = array(2,4,5,1,64,23,44); // кэшированные данные
echo $entries[array_rand($entries)];
denlam
всем огромное спасибо! Понравился метод maxims . Буду ждать его отзывов после теста
twin
Цитата
можно так:

3. запрос к базе с припиской LIMIT наше _сл_число, 1.

при этом мы не привязаны к какимто значениям в таблице.

Сдается мне что по индексу будет быстрее, но проверять лениво. Как вариант

WHERE `id` >= наше _сл_число LIMIT 1

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
denlam
Цитата (maxims @ 18.04.2010 - 23:48)
можно так:
1. сначала находим общее количество записей через COUNT();

Как узнать общее количество записей? Можно на этом подробнее?
phz
$sql = mysql_query("SELECT COUNT(*) AS `int` FROM `table`");
$count = mysql_result($sql, 0);
maxims
В один запрос все три действия запихнуть не получилось (((( может как-то и можно......

а в остальном мне добавить не чего, уже и так всё расписали что да как. wink.gif
twin
Во заметил, поздравляю. smile.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
kirik
twin
О!! крутяк! Спасибо! Так бы сухой спать ушел.. smile.gif
Быстрый ответ:

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