在以下情况下: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
但是我不完全理解为什么这个查询可以按我的意愿工作。如果有人可以解释,那就太好了。