X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Выбор случайной строкі в БД
Karamba_hb
Karamba_hb
Topic Starter сообщение 31.8.2012, 15:21; Ответить: Karamba_hb
Сообщение #1


Подскажите плиз как выбрать случайную 1 строку в БД?
я чтото по нэту полазил дак там вообще фигня какаято непонятная(
Кстати чтото нашёл, такой код вконце запроса писать?
ORDER BY RAND() LIMIT 1
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 1.9.2012, 0:42; Ответить: Arks
Сообщение #2


Order BY вообще лучше не используйте.. используйте sphinks для большого количество записей.
А так - да, order by FNC

в качестве FNC может выступать функция, например RAND() и т.д.
также имеет место быть ORDER BY FIELD
ну и обычный ORDER BY <поле> ASC/DESC

чем плох ORDER BY RAND() и иже с ними - тем что перед выборкой данных Вы как правило получите fullscan таблицы и если она будет большой, то с filesort'ом. Хотя ORDER BY при этом(парадокс) - всегда применяется к уже полученному набору.... Короче смотря как написать запрос.
Для rowset'ов c малым количеством данных ничего плохого.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Muxa_hb
Muxa_hb
сообщение 2.9.2012, 3:37; Ответить: Muxa_hb
Сообщение #3


[PHP]$rand = mt_rand(0,N); #вместо N - число записей таблицы
$query = "SELECT .... LIMIT {$rand},1";[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Karamba_hb
Karamba_hb
Topic Starter сообщение 8.9.2012, 12:53; Ответить: Karamba_hb
Сообщение #4


Muxa,но ведь число записей в таблице я незнаю, мне придёться делать доп. запрос на селект, чтобы посчитать кол-во строк
Arks,ну у меня строк немного, примерно 10, может 20, максимум 50... А на счёт FNC filesor rowset я не знаю что это))

Кстати для проверки поставил 2 строки, и прописал свой код
ORDER BY RAND() LIMIT 1

И всё равно выделяються 2 стркои
Тоесть у меня там есть ещё WHERE='$user'
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Muxa_hb
Muxa_hb
сообщение 8.9.2012, 15:19; Ответить: Muxa_hb
Сообщение #5


Karamba, и что, этот запрос много жрет?
[PHP]$query = "SELECT COUNT(*) FROM `table`";
$res = mysql_query($query);
if($res) $data = mysql_fetch_array($res,MYSQL_NUM);
$rand = mt_rand(0,$data[0]); #вместо N - число записей таблицы
$query = "SELECT .... LIMIT {$rand},1";[/PHP]
P.S. это если используете mysql для работы
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Karamba_hb
Karamba_hb
Topic Starter сообщение 8.9.2012, 19:53; Ответить: Karamba_hb
Сообщение #6


Muxa,ну незнаю, мне кажеться плохо когда лішніе запросы появляються
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Muxa_hb
Muxa_hb
сообщение 8.9.2012, 20:07; Ответить: Muxa_hb
Сообщение #7


о да! два небольших по времени выполнения запроса это конечно же хуже чем один, но зато который может положить сервак. Создайте таблицу на 10000 строк и сравните результат по скорости (если сервак выдержит такой запрос с ORDER BY RAND() )

P.S. забейте в гугл ваше ORDER BY RAND() и почитайте что пишут об этом, и где он складывает найденные записи..

вся "тяжеловесность" ORDER BY RAND() в том, что она сначала извлечет все записи (т.е. по сути тот же запрос что я привел, только не через COUNT), затем сохранит их во временную таблицу, а затем уже из них выберет рандомную запись. То есть в итоге получится те же самые два запроса - только один "скрытый" - но который не возвращает число затронутых рядов, а извлекает каждый найденный ряд (строку) в новую таблицу (временную), из которой потом берет рандомно записи

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Продаю чистый трафик недорого с рефами на ваш выбор
траф с подстановкой рефа, трафик, купить трафик, накрутить счетчик
66 bat 57368 22.9.2023, 11:08
автор: bat
Горячая тема (нет новых ответов) 300 площадок под вечные ссылки на выбор: ТИЦ 20-9400, PR 0-6, ЯК, DMOZ. Скидки при пакетном заказе!
65 inkon 30399 19.7.2022, 13:41
автор: Funoman
Открытая тема (нет новых ответов) ProstoCash.com - Выбор лучших!
Быстрый и надежный обмен в более чем 2000 направлениях!
5 ProstoCash 2644 31.12.2019, 17:08
автор: ProstoCash
Открытая тема (нет новых ответов) Выбор партнерской программы
нужна помощь
5 Pavel85 4376 4.11.2018, 23:51
автор: Kuzzma
Открытая тема (нет новых ответов) Большой выбор статей о здоровье, красоте и спорте
0 JournalOK 2909 2.11.2018, 11:06
автор: JournalOK


 



RSS Текстовая версия Сейчас: 26.4.2024, 8:20
Дизайн