すべて+ MAX値を選択し、最大値を持つ行のみを受け取りたいです。
$query = $this->createQueryBuilder('s');
$query->where('s.challenge = :challenge')->setParameter('challenge', $challenge);
$query->groupBy('s.score');
$query->getQuery();
return $query->select('s.*, MAX(s.score) AS max_score')->getQuery()->getResult();
どうすれば教義でこれを達成できますか? *プロパティが見つからないというエラーが表示されます。私はそれらをすべて一つずつ選択しようとしましたが、運もありません。
目標は、このようなことを達成することです
SELECT user, challenge, whateverelse, MAX(score) FROM users_scores_table GROUP BY user_id
助けてください ;)
これが最終的な作業クエリです
$query = $this->createQueryBuilder('s');
$query->select('s, MAX(s.score) AS max_score');
$query->where('s.challenge = :challenge')->setParameter('challenge', $challenge);
$query->groupBy('s.user');
$query->setMaxResults($limit);
$query->orderBy('max_score', 'DESC');
return $query->getQuery()->getResult();
遅すぎますが、記録のためにこれを書きます。
SELECTステートメントで "as HIDDEN"を使用して最終結果のフィールドを削除できます。これにより、結果フィールドを変更せずに順序付けまたはグループ化に使用できます。
あなたの例では:
$query = $this->createQueryBuilder('s');
$query->select('s, MAX(s.score) AS HIDDEN max_score');
$query->where('s.challenge = :challenge')->setParameter('challenge', $challenge);
$query->groupBy('s.user');
$query->setMaxResults($limit);
$query->orderBy('max_score', 'DESC');