在以下情形中:
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
的{{1}}不是唯一的。
简而言之:如果我的老师的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
答案 0 :(得分:0)
在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
但我并不完全理解为什么这个查询会按我的意愿运作。如果有人能够解释,那就太好了。