我对mysql的了解不多。我的 django 模型如下:
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')
我想检索满足 exercise_id=1 对应的强度等级 = 7 的 user_id 的计数,以此类推,直到 7 为止。简而言之,在所有练习中达到强度等级 = 7 的用户。
我写了一个查询,如下所示:
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 视图中反映相同的内容?