バックグラウンド ストーリー
毎年恒例のレースのアプリケーション データを格納する MYSQL テーブルがあります。特に、このテーブルには Racer の ID とそのレース アプリケーションの年が保持されます。
今年は、アプリケーションのランダム選択プロセスを重み付けして、X 年連続してアプリケーションを作成した人が選択される可能性が高くなるようにしたいと考えています。
私のPHPスクリプトでは、MYSQLオブジェクトが適用された年ごとに1レコードを返し、ランダムに1つを選択してDB結果配列から割り当てを解除し、それを勝者配列に割り当て、同じIDを持つ他のすべての勝者を無視します今年のために。
実際の問題
この方法の問題は、現在の MYSQL クエリが、今年および過去のレースに応募したすべての人のすべてのレコードを返すことです。2014年以前の継続的なアプリケーションのみを返す方法はありますか(できればMYSQLを使用して)?
このSQL FIddleからの結果セットの例は、"1, 1, 1, 2, 2, 2, 2, 3" になります。
私の現在のクエリは次のとおりです。
SELECT a.racer_id FROM applications a
WHERE a.racer_id IN
(
SELECT ab.racer_id FROM applications ab
WHERE ab.racer_id = a.racer_id AND ab.race_year=2014
)
ORDER BY RAND();
2014 年以前の継続的な記録だけでなく、過去のすべての年を取得するため、これは機能しません。