这可能有一个简单的解决方案,但我现在无法围绕它解决问题。MySQL中的逻辑运算符,建立了一组规则
我的表看起来像这样
|id|company_id|shift_type_id|user_id|date|create_at|updated_at|
我想列出属于一个特定的用户转移
SELECT * FROM shifts WHERE user_id = 1
然后让两个日期之间的选择
SELECT * FROM shifts WHERE user_id = 1 and date BETWEEN '2012-07-09' and '2012-07-15'
排除是在周六和周日现在
SELECT * FROM shifts WHERE user_id = 1 and date BETWEEN '2012-07-09' and '2012-07-15' and DAYNAME(date) != "Saturday" and DAYNAME(date) != "Sunday"
棘手的部分都转移(对我来说),在这一切之上,我想以排除周五和与特定shift_type_id轮班这种情况下6.我试图这样做
SELECT * FROM shifts WHERE user_id = 1 and date BETWEEN '2012-07-09' and '2012-07-15' and DAYNAME(date) != "Saturday" and DAYNAME(date) != "Sunday" and (DAYNAME(date) != "Friday" and shift_type_id != 6)
这是不行的,我不明白为什么,我不知道如何解决这个问题。我见过一些解决方案,它们使用子查询并从主结果中排除结果,但我希望保持这种简单的构建方式,以便可以从一组规则中创建查询。
我在Rails3中的项目这样做的,这是什么样子
@user.work_hours.where('shifts.date between ? and ?', params[:start_date], params[:end_date]).where('DAYNAME(shifts.date) != "Sunday" and DAYNAME(shifts.date) != "Saturday" AND (DAYNAME(shifts.date) != "Friday" and shifts.shift_type_id != 6)')
谢谢你的回复托尼。我现在正在尝试此操作,但由于某种原因,此查询排除了shift_type_id为5的班次,并且在星期三。我的猜测是因为我只要求shift_type_id = 6,而不是将它与DAYNAME(日期)!=“星期五”分组。 – joakimpl 2012-07-11 14:39:15
啊尝试和(不((DayName(日期)=“星期五”和shift_type_id = 6)) – 2012-07-11 15:47:02
非常感谢托尼,工作。我认为查询的一部分必须分组,但我不知道它必须这样写。 – joakimpl 2012-07-12 07:34:32