今、PHP+Postgresである処理を行っております。

現時刻から、お店の空いている時間帯を検索できるプログラムなのですが、PostgresSQL内に開店する時間が19:30分、閉店する時間が3:30で格納されております。

これでは、普通に比較しては、明日という判断が出来ないため、期待通りの結果になりません。
PHPの関数などで、処理をするのではなく、PostgresSQLのクエリで処理が終了できるようにお願いいたします。
※ただ、もちろん、クエリに値を渡す、事前準備でPHP関数を使うのは、問題ございません。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/05/18 23:48:20
  • 終了:2006/05/21 13:10:51

回答(6件)

id:westfish No.1

westfish回答回数49ベストアンサー獲得回数12006/05/19 00:14:57

ポイント19pt

閉店する時間と開店する時間の大小関係で場合分けしてはどうでしょう?

{「開店する時間 < 閉店する時間」 かつ 「開店する時間 < 現時刻」 かつ 「現時刻 < 閉店する時間」} または {「開店する時間 > 閉店する時間」 かつ 「開店する時間 > 現時刻」 かつ 「現時刻 > 閉店する時間」}

です。URLはダミーです。

http://www.yahoo.com/

id:makocan

やってみたのですが、期待通りの結果にはなりませんでした。

ちなみに、下記のクエリです。

open_timeは開店、close_timeは閉店、$timeは現時刻となります。

select * from table_name where ( (open_time < close_time) and (open_time < '$time') and ('$time' < close_time) ) or ( (open_time > close_time) and (open_time > '$time') and ('$time' > close_time

2006/05/19 01:34:11
id:table No.2

table回答回数59ベストアンサー獲得回数12006/05/19 00:18:57

ポイント19pt

現時刻が19:30以上か、3:30以下かで条件を分けて、

比較するのは以下かででょうか?


日にちは関係なく、時間だけを比較してはいけないのですか?


明日という判断をどういう時にするのか分かりませんが、

的外れな答えだったらすいません。


ダミー

http://www.google.co.jp/

id:ekusutasii No.3

ekusutasii回答回数224ベストアンサー獲得回数02006/05/19 04:47:44

ポイント18pt

あなたの脳はちょっと一般人の脳とは構造が違うかの錯覚におちいります。http://www.sabakugalu.co.jp/

id:falcosapiens No.4

falcosapiens回答回数126ベストアンサー獲得回数132006/05/19 11:05:16

ポイント18pt

データ型を無視して(または変換して)良いのであれば,

閉店時間が開店時間より早い場合には

閉店時間に24時間プラスし,

その上で比較するという処理が一番簡単かと思います。

PHPは型にそれほどうるさくないですから。

http://ww7.tiki.ne.jp/~inabah/php/002_005.htm

id:westfish No.5

westfish回答回数49ベストアンサー獲得回数12006/05/19 16:29:30

ポイント18pt

>やってみたのですが、期待通りの結果にはなりませんでした。

理論的にはうまく行くかと思ったのですが…具体的にはどういう結果になりましたか?$timeの型がopen_timeやclose_timeと直接比較するのに適した形になっていないとかではないですか?

URLはダミーです。http://www.yahoo.com

id:makocan

結果としては、例えば、現在が1時30分だとしますと、19:00~1:00の間を拾ってきてしまいます。

なおかつ、19:00~4:00の様なデータは拾ってきてくれません。

何が悪いと考えられますでしょうか。。。

2006/05/20 01:34:02
id:kazu1107 No.6

kazu1107回答回数199ベストアンサー獲得回数142006/05/20 12:11:40

ポイント18pt

回答1の条件式は正しそうに見えるのでデータ型の問題ではないでしょうか?

close_timeやopen_time、$timeはどのようなデータ型をしているのですか?もし"19:00"などというデータがそのまま入ってるようなら多分文字列扱いなので上手くいかないと思います。

おすすめの計算方法としてはデータに一日の秒数86400秒を基準に整数データを保存し、close_time,open_time,$timeで統一することです。

この方法はUnixタイムと呼ばれるものに基づいた計算法なのでPHPもその手の関数は備えています。

http://ponk.jp/php_time/index.php?page=1

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません