Jak wybrać losowo z doktryną

Oto, jak mogę zapytać moją bazę danych o kilka słów

$query = $qb->select('w')
    ->from('DbEntities\Entity\Word', 'w')
    ->where('w.indictionary = 0 AND w.frequency > 3')
    ->orderBy('w.frequency', 'DESC')
    ->getQuery()
    ->setMaxResults(100);

Używam mysql i chciałbym uzyskać losowe wiersze, które pasują do kryteriów, używałbym kolejności przez rand () w moim zapytaniu.

znalazłemto podobne pytanie, które zasadniczo sugeruje, że ORDER BY RAND nie jest obsługiwane w doktrynie, zamiast tego możesz losowo ustawić klucz podstawowy. Nie można tego jednak zrobić w moim przypadku, ponieważ mam kryteria wyszukiwania i klauzulę where, aby nie każdy klucz podstawowy spełniał ten warunek.

Znalazłem teżfragment kodu sugeruje to użycie PRZESUNIĘCIA do losowania wierszy w następujący sposób:

$userCount = Doctrine::getTable('User')
     ->createQuery()
     ->select('count(*)')
     ->fetchOne(array(), Doctrine::HYDRATE_NONE); 
$user = Doctrine::getTable('User')
     ->createQuery()
     ->limit(1)
     ->offset(rand(0, $userCount[0] - 1))
     ->fetchOne();

Jestem trochę zdezorientowany, czy to pomoże mi obejść brak wsparcia dla porządku losowego w moim przypadku, czy nie. Nie mogłem dodać przesunięcia po ustawieniu setMaxResult.

Jakiś pomysł, jak można to osiągnąć?

questionAnswers(13)

yourAnswerToTheQuestion