Как получить случайную запись из базы

Раньше я делал в контролере таким образом:

public function executeRandom()
{
$c = new Criteria();
$this->catalog = CatalogPeer::doSelect($c);
$rand_keys = array_rand($this->catalog, 1);
$this->item= $this->catalog[$rand_keys];
}

Но недавно натолкнулся на более элегантное решение:

public static function getRandomUsers($num=1){
$c = new Criteria();
$c->addAscendingOrderByColumn('rand()');
$c->setLimit($num);
$users = UserPeer::doSelect($c);
return $users;
}

Этот код нужно добавить в класс модели.

Теперь есть возможность получать больше чем одну сулчайную запись, устанавливая параметр $num

Теги: , ,

Вы можете оставить комментарий или подписаться на RSS feed

Коментарии

Можно сделать и на креоле(если разговор идет о propel 1.2) с помощью след. sql :

SELECT [fields] FROM [table_name] ORDER BY RAND() LIMIT 0, 1;

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

.s

елки палки, не увидел во втором экзэмле ascOrderByColumn()

:)

беру свои слова обратно :)

Оставить комментарий

(обязательно)

(обязательно)