0

これにはおそらく簡単な解決策がありますが、現時点では頭を包むことはできません。

私のテーブルはこんな感じ

|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)')

4

1 に答える 1

0

あなたが必要だと言ったことから

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)

シフト ID が 6 の金曜日を除外すると、ID が 6 でない金曜日が除外されました。

于 2012-07-11T14:31:16.567 に答える