私は2つのテーブルを持っています:
current_challenges (challenge_id, award_type, award_at_count, expires_in_hours)
と
user_challenges (user_challenge_id, user_id, challenge_id, awarded)
テーブルはチャレンジのcurrent_challenges
タイプであり、user_challenges
テーブルは現在「アクティブ」であり、さまざまなユーザーのチャレンジがすでに「完了」しています。テーブルは を介して接続されchallenge_id
ます。完了したチャレンジはawarded
!= '0000-00-00 00:00:00' のチャレンジであり、'アクティブな'チャレンジはawarded
設定された日時です。
私がやりたいのはchallenge_id
、その特定のユーザーがまだ完了していないランダムなシングルを取得することですがaward_type
、そのユーザーに対してアクティブなものが既に2つある場合は、選択しないでください。
そのため、ユーザーごとに同じ award_type でアクティブなチャレンジは最大 2 つだけにする必要があります。
例:
current_challenges テーブル:
challenge_id award_type award_at_count expires_in_hours
49 1 1 24
50 1 2 24
51 1 3 24
52 2 4 24
53 2 5 24
54 2 6 24
user_challenges テーブル:
user_challenge_id user_id challenge_id awarded
1 8 49 0000-00-00 00:00:00
2 8 50 0000-00-00 00:00:00
3 8 52 2012-12-06 13:58:27
4 11 53 0000-00-00 00:00:00
5 11 54 0000-00-00 00:00:00
ユーザー 8 の場合、challenge_id
49,50 は既にアクティブであるため選択されません。51 は、award_type
= '1' で既に 2 つアクティブになっているため、そうではありません。52 は既に完了しているため、返された として 53 または 54 のいずれかを残して、そうではありませんchallenge_id
。
長い投稿で申し訳ありませんが、できるだけ明確にしたかったのです。私は先日プレイしましたが、どこにも行きませんでした...LEFT JOIN
そしてHAVING COUNT()
どこかで推測していますが、それを理解することはできません...