Mysql 如何根据第三个表所属的记录进行分组,有很多问题
我有以下代码: quick.rbMysql 如何根据第三个表所属的记录进行分组,有很多问题,mysql,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,Mysql,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,我有以下代码: quick.rb has_many :quiz_attempts student.rb has_many :quiz_attempts quick_.rb belongs_to :student belongs_to :quiz 我需要做的是从有测验id的测验表中获取学生的所有记录,并根据它显示测验表的记录 也就是说,如果学生参加了一个测验A 10次,测验B 5次,那么我需要在测验表中将所有这些行显示为2 鉴于此,我将只有2条测验表记录,它们与测验表中A和B的15条记录共同
has_many :quiz_attempts
student.rb
has_many :quiz_attempts
quick_.rb
belongs_to :student
belongs_to :quiz
我需要做的是从有测验id的测验表中获取学生的所有记录,并根据它显示测验表的记录
也就是说,如果学生参加了一个测验A 10次,测验B 5次,那么我需要在测验表中将所有这些行显示为2
鉴于此,我将只有2条测验表记录,它们与测验表中A和B的15条记录共同关联
测验尝试有测验id
列和学生id列,测验表中没有学生id
我正在处理的查询是:
@quizzes = @student.quiz_attempts.includes(:quiz)
但问题是,它仍然显示了2行,但是来自测验表,我不能将它们分组为测验表
我需要一个完整的解决方案
Quiz.joins(quiz_attempts: :student)
.where.not(students: { id: nil })
.group('quizzez.id')
以上所做的基本工作如下:
quick.joins(quick\u truments::student)
-从quizzes
表中选择与quick\u truments
和student
表有关联的所有行.where.not(学生:{id:nil})
从上面只选择那些有学生参加过测验的测验
.group('quizzez.id')
表示,我们不希望同一个测验显示多次,因为很多学生都试图通过,但只有uniq记录quick.joins(quick\u truments::student)
-从quizzes
表中选择与quick\u truments
和student
表有关联的所有行.where.not(学生:{id:nil})
从上面只选择那些有学生参加过测验的测验
.group('quizzez.id')
表示,我们不希望同一个测验显示多次,因为很多学生都试图通过,但只有uniq记录不起作用,它仍然显示测验表中的15行。它确实显示了测验表中的记录,但数字是15。它应该只有2条记录,因为相关的15条记录在Quizz_attempts表中。@Learningor然后您必须按quizzez.id列分组,编辑answer@LearningROR(很高兴帮忙)@LearningROR我是乌克兰人:D只是我最近住在波兰,但无论如何欢迎你:)哈哈我的错,但你有天赋,兄弟;)谢谢大家的帮助。不起作用,它仍然显示测验表中的15行。它确实显示了测验表中的记录,但数字是15。它应该只有2条记录,因为相关的15条记录在Quizz_attempts表中。@Learningor然后您必须按quizzez.id列分组,编辑answer@LearningROR(很高兴帮忙)@LearningROR我是乌克兰人:D只是我最近住在波兰,但无论如何欢迎你:)哈哈我的错,但你有天赋,兄弟;)谢谢你的帮助。
class Quiz < ActiveRecord::Base
scope :by_student_id, lambda { |student_id|
joins(quiz_attempts: :student).where(students: { id: student_id }).group('quizzez.id')
}
end
Quiz.by_student_id(current_user.id)