У нас есть таблица, из которой мы хотим выбрать случайную строку из последних 1000 записей.Однако пользователь может вводить несколько раз, и независимо от количества записей у каждого пользователя должен быть одинаковый шанс.В настоящее время это решается с помощью собственного запроса (см. Ниже), который работает.Мне было интересно, можно ли перевести это поведение в оператор Doctrine, поскольку в будущем мы планируем перейти с MySQL на PostgreSQL.
Текущее решение:
$conn = $this->em->getConnection();
$sql = 'SELECT tmp.username FROM (SELECT username, id FROM entries ORDER BY id DESC limit 1000) AS tmp GROUP BY tmp.id ORDER BY RAND() LIMIT 1';
$stmt = $conn->prepare($sql);
$stmt->execute();