Вот как я запрашиваю некоторые слова из своей базы данных
$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 Результат.
Есть идеи, как это можно сделать?