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ąć?