Вот как я запрашиваю мою базу данных для некоторых слов
$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();
Я немного смущен в отношении того, поможет ли это мне обойти отсутствие поддержки для заказа случайным в моем случае или нет. Мне не удалось добавить смещение после setMaxResult.
Любая идея, как это можно сделать?