私はmysqlの知識があまりありません。私のジャンゴモデルは次のとおりです。
class Exercise_state(models.Model):
exercise = models.ForeignKey(Exercise, blank=True, null=True)
user = models.ForeignKey(User, blank=True, null=True)
intensity_level = models.IntegerField(default='1')
progress = models.IntegerField(default='0')
current_date = models.DateField(auto_now=True)
user_rating = models.IntegerField(default='0')
私は、すべての運動 ID について、運動 ID = 1 に対応する強度レベル = 7 などを満たすユーザー ID の数を取得したいと考えています。つまり、すべての運動で強度レベル = 7 に達したユーザーです。
次のようなクエリを1つ作成しました。
select count(user_id) from demo_exercise_state where
exercise_id=1 and intensity_level=7 and
exercise_id=2 and intensity_level=7 and
exercise_id=3 and intensity_level=7 and
exercise_id=4 and intensity_level=7 and
exercise_id=5 and intensity_level=7 and
exercise_id=6 and intensity_level=7 and
exercise_id=7 and intensity_level=7;
データベースから直接結果をクロスチェックできる限り、トレーニングを完了したユーザー (つまり、すべてのエクササイズ タイプで強度レベル = 7 に達したユーザー) はいないため、カウントは「0」として返されます。
かなりの繰り返しがあるため、クエリを最適化できると確信していますが、その方法はわかりません。
また、djangoビューで同じことを実行したい(つまり、同じ結果を得たい)。そこに私は次のようなものを持っています
all_exercise_finish_count = Exercise_state.objects.filter(exercise_id=1, intensity_level=7).count()
このdjangoビューで同じことをどのように反映できますか?