これにはおそらく簡単な解決策がありますが、現時点では頭を包むことはできません。
私のテーブルはこんな感じ
|id|company_id|shift_type_id|user_id|date|create_at|updated_at|
特定のユーザーに属するシフトを一覧表示しようとしています
SELECT * FROM shifts WHERE user_id = 1
次に、2つの日付から選択します
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)')