在以下情况下:

ClassHour (teacher_id, room_id, hour_id, group_id, subject_id)

我需要获取给定老师的所有class_hours,而无需考虑group_id。

id    teacher_id    room_id    hour_id    group_id    subject_id
1         1            1          1          1            1
2         1            1          1          2            1
3         1            2          2          1            1
4         2            1          3          2            3


我只需要获得给定老师的unique records on room_id, hour_id and subject_id

这是:teacher_one.schedule应该返回class_hours with ids [1,3],因为带有id == 2的不是唯一的。

简而言之:如果我的老师的ID是1,则teacher.schedule需要返回:

id    teacher_id    room_id    hour_id    group_id    subject_id
1         1            1          1          1            1
3         1            2          2          1            1

最佳答案

在HackHands会话之后,我们就此结束了,它可以正常工作:

class Teacher
  ...
  def schedule
    ids = ClassHour.find_by_sql(['SELECT max(class_hours.id) mid FROM class_hours inner join hours on class_hours.hour_id = hours.id inner join rooms on class_hours.room_id = rooms.id where class_hours.teacher_id = ? group by hours.id, rooms.id', self.id]).map { |x| x['mid'] }
    ClassHour.find ids
  end
end


但是我不完全理解为什么这个查询可以按我的意愿工作。如果有人可以解释,那就太好了。

10-07 18:48