Как сделать случайный выбор с помощью доктрины

Вот как я запрашиваю некоторые слова из своей базы данных

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

Я использую mysql и я хотел бы получить случайные строки, соответствующие критериям, я бы использовал порядок по rand() в моем запросе.

Я нашел этот похожийвопрос, который в основном предполагает, что ORDER BY RAND не поддерживается в доктрине. , вместо этого вы можете рандомизировать первичный ключ. Однако в моем случае это невозможно сделать, потому что у меня есть критерии поиска и предложение where, так что не каждый первичный ключ удовлетворяет этому условию.

Я также нашел фрагмент кода, который предлагает вам использовать OFFSET для рандомизации строк следующим образом:

$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();

Я немного запутался, поможет ли это мне обойти отсутствие поддержки случайного порядка в моем случае или нет Я не смог добавить смещение после setMax Результат.

Есть идеи, как это можно сделать?

32
задан Community 23 May 2017 в 12:03
поделиться