2016-06-07 61 views
1

选择具有3列重复的记录在以下情形:ActiveRecord的帐户

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 1teacher.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

添加了所需的结果@Strawberry –

回答

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 

但我不完全明白为什么这个查询按我的意思工作。如果有人能解释,那会很好。