Помощник
|
Выбор случайной строкі в БД |
Karamba_hb
|
Сообщение
#1
|
||
|
|
||
|
|||
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 |
2.9.2012, 3:37;
Ответить: Muxa_hb
Сообщение
#3
|
|
[PHP]$rand = mt_rand(0,N); #вместо N - число записей таблицы
$query = "SELECT .... LIMIT {$rand},1";[/PHP] |
|
|
Karamba_hb
|
Сообщение
#4
|
|
Muxa,но ведь число записей в таблице я незнаю, мне придёться делать доп. запрос на селект, чтобы посчитать кол-во строк
Arks,ну у меня строк немного, примерно 10, может 20, максимум 50... А на счёт FNC filesor rowset я не знаю что это)) Кстати для проверки поставил 2 строки, и прописал свой код ORDER BY RAND() LIMIT 1 И всё равно выделяються 2 стркои Тоесть у меня там есть ещё WHERE='$user' |
|
|
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
|
Сообщение
#6
|
|
Muxa,ну незнаю, мне кажеться плохо когда лішніе запросы появляються
|
|
|
Muxa_hb |
8.9.2012, 20:07;
Ответить: Muxa_hb
Сообщение
#7
|
|
|
о да! два небольших по времени выполнения запроса это конечно же хуже чем один, но зато который может положить сервак. Создайте таблицу на 10000 строк и сравните результат по скорости (если сервак выдержит такой запрос с ORDER BY RAND() )
P.S. забейте в гугл ваше ORDER BY RAND() и почитайте что пишут об этом, и где он складывает найденные записи.. вся "тяжеловесность" ORDER BY RAND() в том, что она сначала извлечет все записи (т.е. по сути тот же запрос что я привел, только не через COUNT), затем сохранит их во временную таблицу, а затем уже из них выберет рандомную запись. То есть в итоге получится те же самые два запроса - только один "скрытый" - но который не возвращает число затронутых рядов, а извлекает каждый найденный ряд (строку) в новую таблицу (временную), из которой потом берет рандомно записи
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Продаю чистый трафик недорого с рефами на ваш выбор траф с подстановкой рефа, трафик, купить трафик, накрутить счетчик |
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 |
Текстовая версия | Сейчас: 26.4.2024, 8:20 |