Как взять случайный массив из БД - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB93.4409
BTC/USD63232.4760
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 25.04.2013, 14:40   #1
DoctorK
Member
 
Регистрация: 14.08.2010
Сообщений: 66
Бабло: $27924
По умолчанию Как взять случайный массив из БД

Всем привет! Подскажите плиз

Есть таблица в базе там список( 20 штук например), мне нужно на выходе получить в массив не всех записи а случайные 11 из 20

Т.е. я попытался сделать такой запрос:
PHP код:
$result mysql_query("SELECT * 
FROM `posts`
LIMIT 11
ORDER BY RAND( ) "
); 
т.е. этим запросом я хочу в переменную $result загнать 11 случайных строк из таблицы posts

Прошу помощи с запросом или еще варинат: Это в переменную загнать всю таблицу и некой чудо функцией удалить от туда часть строк, но это сложней наверное, думаю что можно сделать это все в запросе
__________________
DoctorK вне форума  
Старый 25.04.2013, 15:16   #2
Ocelot
Senior Member
 
Аватар для Ocelot
 
Регистрация: 23.09.2007
Адрес: Siberia
Сообщений: 368
Бабло: $42275
По умолчанию

PHP код:
SELECT FROM `postsORDER BY RAND() LIMIT 11 
Ocelot вне форума  
Старый 25.04.2013, 16:21   #3
DoctorK
Member
 
Регистрация: 14.08.2010
Сообщений: 66
Бабло: $27924
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от Ocelot Посмотреть сообщение
PHP код:
SELECT FROM `postsORDER BY RAND() LIMIT 11 
Tnx!
__________________
DoctorK вне форума  
Старый 25.04.2013, 16:57   #4
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

PHP код:
SELECT FROM `postsORDER BY RAND() 
более тяжелого запроса сходу наверно и не придумать, хотя попробую:

PHP код:
SELECT *, RAND() as 'rnd'
FROM `postsP1 
LEFT JOIN 
`postsP2 ON P1.post_title!=P2.post_title
GROUP BY rnd ORDER BY RAND
(), rnd 
да, вот так хорошо будет и "сервер, давай до свидания"

а если серьезно, то ORDER BY RAND() нужно использовать крайне осторожно и в качестве временного решения, если количество записей...ну например более 1000, иначе оно будет жрать ресурсы, порой очень сильно.
Правильных решений рандомных выборок из БД несколько и на форуме тут где-то был топик про это.
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 25.04.2013, 17:18   #5
Venya Tolinov
Senior Member
 
Аватар для Venya Tolinov
 
Регистрация: 24.11.2010
Сообщений: 229
Бабло: $52860
Отправить сообщение для Venya Tolinov с помощью Skype™
По умолчанию

Для базы данных Google Storage завожу поле rnd (float), при инициализации туда вставляю случайное значение. При выборки делаю так:
PHP код:
#Python для Google App Engine
_hs Host.all().filter("rnd > "random()).order("rnd").fetch(20)
hs_len 20 len(_hs)
if 
hs_len:
    
_hs += Host.all().order("rnd").fetch(hs_len
Реализация другая но суть та же, а что бы работало нормально в MySQL надо при создании таблицы внести rnd в список primary key.
__________________
Amazon Graffiti - монетизация страниц в Facebook

Последний раз редактировалось Venya Tolinov; 25.04.2013 в 17:28.
Venya Tolinov вне форума  
Старый 27.04.2013, 10:27   #6
Platosha
Юниор
 
Аватар для Platosha
 
Регистрация: 25.03.2012
Сообщений: 1,069
Бабло: $339980
По умолчанию

Цитата:
Сообщение от chesser
Правильных решений рандомных выборок из БД несколько и на форуме тут где-то был топик про это.
че-то я не нашел такого топика (

Мне нужно из базы, где пара миллионов записей, брать рандомно одну. Есть подозрение, что ордер бай ранд положит все ) ID упорядоченного нет в базе. Гуглил данный вопрос - нашел пару решение, но я тупо копипастил их, и уменя не работало ничего ) Помогите, пожалуйста )
Platosha вне форума  
Старый 27.04.2013, 10:58   #7
Sterx
Юниор
 
Регистрация: 15.03.2009
Сообщений: 19
Бабло: $4375
По умолчанию

упорядоченных полей вообще нет? сделайте.
Sterx вне форума  
Старый 27.04.2013, 11:07   #8
Venya Tolinov
Senior Member
 
Аватар для Venya Tolinov
 
Регистрация: 24.11.2010
Сообщений: 229
Бабло: $52860
Отправить сообщение для Venya Tolinov с помощью Skype™
По умолчанию

Цитата:
Сообщение от Platosha Посмотреть сообщение
ID упорядоченного нет в базе.
Дак добавь ALTER TABLE name_tbl ADD PRIMARY KEY rnd FLOAT; , затем инициализировать значение и можно юзать.
__________________
Amazon Graffiti - монетизация страниц в Facebook
Venya Tolinov вне форума  
Старый 27.04.2013, 11:07   #9
creator123
Senior Member
 
Аватар для creator123
 
Регистрация: 05.01.2008
Сообщений: 1,676
Бабло: $213930
По умолчанию

http://habrahabr.ru/post/54176/
creator123 вне форума  
Старый 27.04.2013, 11:09   #10
KongWeiLing
Senior Member
 
Аватар для KongWeiLing
 
Регистрация: 28.03.2011
Сообщений: 419
Бабло: $81005
По умолчанию

Цитата:
Сообщение от Platosha Посмотреть сообщение
че-то я не нашел такого топика (

Мне нужно из базы, где пара миллионов записей, брать рандомно одну. Есть подозрение, что ордер бай ранд положит все ) ID упорядоченного нет в базе. Гуглил данный вопрос - нашел пару решение, но я тупо копипастил их, и уменя не работало ничего ) Помогите, пожалуйста )
кто тебе мешает сделать '.... ORDER BY id LIMIT '.$rndnum.',1'
KongWeiLing вне форума