Рандомная фильтрация списка группы пользователей icms2

 
Посетитель
small user social cms
МедальПочетный донор проектаПочетный донор проекта
Сообщений: 609
Возник вопрос такого плана, есть группа пользователей, эту группу нужно вывести в виджете на главной список пользователей, но как то хотелось бы рандомно выводить по обновлению страницы показывать разных людей, а не в первых рядах одних и тех же, у кого нибудь еще есть такая задачка, находили ли методы решения?
Посетитель
small user social cms
Медаль
Сообщений: 865
system/controllers/users/widgets/list/widget.php
ищем:
Код PHP:
  1. $profiles = $model->limit($limit)->getUsers();
и меняем на
Код PHP:
  1. $users = $model->getUsers();
  2. $profiles = array();
  3. while (count($profiles) < $limit) {
  4. $profiles[] = $users[rand(0,count($users))];
  5. }
остается убрать повторные выборки и лишний перебор на случай если пользователей меньше лимита.
Реклама
cms
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1164
А чем плох array_rand() или shuffle()?
Код PHP:
  1. $users = $model->getUsers();
  2. $profiles = array_rand($users, $limit);
Код PHP:
  1. $users = $model->getUsers();
  2. $profiles = shuffle($users);
  3. $profiles = array_splice($profiles, $limit);
InstantCMS Team
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1343
system/controllers/users/widgets/list/widget.php

после
Код PHP:
  1. $model->filterGroups($groups);
вставить
Код PHP:
  1. $model->order_by = "RAND()";
Посетитель
small user social cms
Медаль
Сообщений: 865
r2, использование
Код PHP:
  1. SELECT * FROM table ORDER BY RAND()
приведет к увеличению времени обработки запроса.
Val, очень даже хорош
InstantCMS Team
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1343
PIN, то есть рандомное извлечение из массива со всеми строками быстрее, по-вашему?
Посетитель
small user social cms
МедальПочетный донор проектаАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2551
r2:
то есть рандомное извлечение из массива со всеми строками быстрее, по-вашему?
тоже хотел высказаться, но не успел. Читал на mysql.ru что да, лучше сперва извлечь все строки (1000 ограничение в 2ке по умолчанию), а потом из них рандомить. Пруф не дам. Просто был удивлен, когда это прочитал. И в памяти отложилось.
Виджеты, поля и компоненты для instantcms 2 http://www.zau4man.ru/
InstantCMS Team
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1343
Zau4man, вполне может быть, конечно. Но посмотреть на какой-нибудь бенчмарк все равно хотелось бы, если его кто-то сделает
Посетитель
small user social cms
Медаль
Сообщений: 865
r2, рандом в ордере вытягивает всю таблицу и трудится со всеми записями, что не хорошо.
InstantCMS Team
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1343
PIN, я знаю как работает рандом в mysql) вопрос в другом, есть ли существенная разница (и если есть, то насколько) между тем кто именно выбирает случайные строки - mysql или php? ведь суть операции одинаковая в обоих случаях
вы то делайте как вам больше нравится, мне просто интересно стало
Посетитель
small user social cms
МедальКубок зрительских симпатий
Сообщений: 692
Когда-то давно я тоже интересовался этим вопросом, наткнулся на статью, почитал (особенно комменты).... и остановился на ORDER BY RAND()
p.s. Если конечно без этого ну никак
Редактировалось: 1 раз (Последний: 4 февраля 2015 в 12:50)
Skype: pasha--g
Модератор
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1675
Код PHP:
  1. SELECT id FROM table (WHERE)*? ORDER BY RAND()
при условии что есть ID и он PRIMARY
/*/ where, просто обозначил что он там может быть /*/
— будет быстрее чем
Код PHP:
  1. SELECT * FROM table ORDER BY RAND()
далее массив id можно сохранить закешировать, порезать кусками и формировать запрос напрмер с IN() вместо лимита, тогда повторений точно не будет )

Думаю нет смысла обсуждать это совсем абстрактно
r2:
есть ли существенная разница (и если есть, то насколько) между тем кто именно выбирает случайные строки - mysql или php?

Многое будет зависеть от данных, количества записей, установки MySql и ТД…
«Главное “настрой”! И всё настроиться…» © ) Их знают все! А вы?
Посетитель
small user social cms
Медаль
Сообщений: 865
• Mike •:
количества записей,
предполагаю до 1000 строк напряжения не будет.
Но для наглядности конечно надо цифры.
r2, нет сомнений
Посетитель
small user social cms
МедальПочетный донор проектаПочетный донор проекта
Сообщений: 609
Спасибо всем друзья, почитал, узнал много для себя нового, вопрос с виджетом решен.
В начало страницы
Предыдущая темаСледующая тема Перейти на форум: