運動競技の結果を追跡するデータベースにクエリを書き込んでいます。私のデータベースにはアスリートテーブルがあります:
| id | first_name | last_name | Gender |
| 1 | Sam | Johnson | m |
| 2 | Adam | Jones | m |
と結果表
| id | time | athlete_id
| 1 | 1302 | 1
| 2 | 1420 | 1
| 3 | 1491 | 2
| 4 | 1541 | 2
| 5 | 0 | 1
すべてのアスリートと最速の結果のみを取得したいと考えています。こんな問い合わせがあります
select a.id as aid, a.`first`, a.`last`, r.`id` as `rid`, min(r.`time`) as `time`
FROM athletes a, results r
WHERE
r.athlete_id=a.id AND
r.time > 0
GROUP BY a.id
ORDER BY r.time
これまでのところ、私のクエリは結果を最速の時間に制限していますが、時間で正しくソートされていません。また、結果テーブルへの2番目の参照を追加してみました
select a.id as aid, a.`first`, a.`last`, r.`id` as `rid`, r.`time`
FROM athletes a, results r, results r2
WHERE
r.athlete_id=a.id AND
r2.athlete_id=a.id AND
r.time > 0
r1.time < r2.time
ORDER BY r.time
しかし、それはメモリ不足エラーを引き起こしました。結果表には 100 万を超えるエントリがあり、アスリートのエントリには 15,000 を超えるエントリがあります。したがって、グループ化されたレコードを効率的に並べ替える方法はありますか、それとも、レコード セットがループしているときに PHP スクリプトで結果を削除する必要があるのでしょうか。