• 締切済み

重複の抽出

カレンダーのようなものを作ってスケジュールの管理をしたいと思い、 start_at datetime end_at datetime sunday boolean monday boolean tuesday boolean ... のように予定の開始・終了時間と、定期的な予定用に曜日のフラグを立てるためのフィールドを用意しました。 データ作成時にすでに登録してある予定と被っているものを抽出したいのですが、 たとえば 毎週月・水・木曜 10:00~12:00 のデータが登録してあり、 1/4 14:00 ~ 1/10 10:00 みたいなデータを新たに登録しようとした場合にどういう風にSQLを書けばいいのかがよくわかりません。 日付から曜日を割り出して、たとえば0なら日曜のフラグがたっているものを抽出するみたいなSQLをかけるのでしょうか? できれば1回のSQLでできればいいのですが…… 聞きたいことがうまく伝わらないかもしれずもうしわけないです。 よろしくお願いします。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>毎週月・水・木曜 10:00~12:00のデータが登録してあり、 >1/4 14:00 ~ 1/10 10:00 期間内に水曜の10~12字を包含しているので、この場合はフラグが たつのが正解ではないですか? おそらくフローがまだ固まっていないのだとおもいます、 きちんと設計段階からコーディングをした方がよいですね

rihm10
質問者

お礼

すみません、例が悪かったです。 >1/4 14:00 ~ 1/10 10:00 これだとあれですが、 1/4 14:00 ~ 1/5 9:00 とかだと水曜と木曜にあるのですが、時間外なので水曜・木曜のフラグはたたせたくありません。こういう判定とかできるのかと思い質問しました。 しかし、カラムをもう少し整理したほうがいいですかね。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

sunday , monday , tuesday ・・・ というフィールドをつくるのはSQL的ではないですね。 dayofweekなどのフィールドをつくって、0=月、1=火、... 6=日 と入れておいた方が効率的です。 (MySQL的には0は月曜日です) >日付から曜日を割り出し SELECT weekday(now()); ただしチューニングを考えたらフィールドを用意する方がいいかも

rihm10
質問者

お礼

曜日は単一ではなくて、複数保持したかったので個別にフラグ立てようと思いこういう形にしました。 >SELECT weekday(now()); ありがとうございます。日付から曜日を出すことができました。 また、質問があるのですが 質問文にある >毎週月・水・木曜 10:00~12:00 >1/4 14:00 ~ 1/10 10:00 これでいうと、月曜の14時から始まっているのですが10:00~12:00に入ってないので月曜はフラグ立てたくないんですが、判別する方法とかあるんでしょうか・・・。 また、1/4~1/10の曜日を出したいんですが、BETWEENみたいなものないのでしょうか。1日1日出そうとするとかなり長い式になってしまうので・・・。