Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何根据第三个表所属的记录进行分组,有很多问题_Mysql_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 4 - Fatal编程技术网

Mysql 如何根据第三个表所属的记录进行分组,有很多问题

Mysql 如何根据第三个表所属的记录进行分组,有很多问题,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条记录共同

我有以下代码:

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条记录共同关联

测验尝试有
测验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记录
  • 编辑 如评论中所述,要使上述查询基于当前用户的id,您可以实现AR:

    以上所做的基本工作如下:

  • quick.joins(quick\u truments::student)
    -从
    quizzes
    表中选择与
    quick\u truments
    student
    表有关联的所有行
  • .where.not(学生:{id:nil})
    从上面只选择那些有学生参加过
    测验的测验
  • .group('quizzez.id')
    表示,我们不希望同一个测验显示多次,因为很多学生都试图通过,但只有uniq记录
  • 编辑 如评论中所述,要使上述查询基于当前用户的id,您可以实现AR:


    不起作用,它仍然显示测验表中的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)