1

すでに私の答えがあるかもしれない他の質問を見て、私はこの質問を助けてくれると思いました. 私は多くのビジネス用のテンプレート Web サイトを持っていますが、そのほとんどは同じ開始時間と終了時間 (月曜日) です。- 金曜、週末休業。ただし、金曜日は早めに閉店し、土曜日は営業している場合もあります。日曜日はすべて閉まっていると思います。

そのようなテーブルを作成しました-

CREATE TABLE `Shop_Hours` (
  `shop` mediumint(8) unsigned NOT NULL default '0',
  `d1s` time NOT NULL default '08:00:00',
  `d1e` time NOT NULL default '17:00:00',
  `d2s` time NOT NULL default '08:00:00',
  `d2e` time NOT NULL default '17:00:00',
.
.
.
  `d6s` time NOT NULL default '00:00:00',
  `d6e` time NOT NULL default '00:00:00',
  `d7s` time NOT NULL default '00:00:00',
  `d7e` time NOT NULL default '00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

ここにいくつかの記録があります:

INSERT INTO `Shop_Hours` (`shop`, `d1s`, `d1e`, `d2s`, `d2e`, `d3s`, `d3e`, `d4s`, `d4e`, `d5s`, `d5e`, `d6s`, `d6e`, `d7s`, `d7e`, `Comments`) VALUES(104, '08:00:00', '17:00:00', '08:00:00', '17:00:00', '08:00:00', '17:00:00', '08:00:00', '17:00:00', '08:00:00', '16:00:00', '08:00:00', '12:00:00', '00:00:00', '00:00:00', '');
INSERT INTO `Shop_Hours` (`shop`, `d1s`, `d1e`, `d2s`, `d2e`, `d3s`, `d3e`, `d4s`, `d4e`, `d5s`, `d5e`, `d6s`, `d6e`, `d7s`, `d7e`, `Comments`) VALUES(105, '08:00:00', '17:30:00', '08:00:00', '17:30:00', '08:00:00', '17:30:00', '08:00:00', '17:30:00', '08:00:00', '17:00:00', '00:00:00', '00:00:00', '00:00:00', '00:00:00', '');
INSERT INTO `Shop_Hours` (`shop`, `d1s`, `d1e`, `d2s`, `d2e`, `d3s`, `d3e`, `d4s`, `d4e`, `d5s`, `d5e`, `d6s`, `d6e`, `d7s`, `d7e`, `Comments`) VALUES(106, '08:30:00', '17:30:00', '08:30:00', '17:30:00', '08:30:00', '17:30:00', '08:30:00', '17:30:00', '08:30:00', '17:30:00', '08:30:00', '14:00:00', '00:00:00', '00:00:00', '');

MY QUESTION は、従来の ASP を使用してレコードをクエリし、次の例のように表示する方法に関連しています。

月曜日 - 金。午前 08:00 ~ 午後 5:00

週末休業

また

月曜日 - 木。午前 8:00 ~ 午後 5:00

金曜 - 午前 8:00 ~ 午後 4:00

土曜日 - 午前 8 時~午後 12 時`

また

等...

これを行うには複数の方法があると思います

  • 私のデータベース構造は大丈夫ですか?
  • 目標とする最終結果を得る最も効率的な方法は何ですか?

確かにこれについての助けをいただければ幸いです。

4

1 に答える 1

0

スキーマに関するいくつかのコメント:

  1. より良い変数名を使用してください。「d1s」さん、それは日曜日ですか、それとも月曜日ですか? おそらく「starttime_monday」でしょうか?
  2. デフォルトの「00:00:00」は「真夜中」を意味します。おそらく、デフォルトの NULL の方がよいでしょう。
  3. 以下の私の答えが最初に行うことは、列を行に変換することです。最初からそのように保管することを検討してください。
  4. ほとんどの企業の勤務時間が同じである場合、全員の値を保存するのは非効率的です。例外のみを保存します。

そうは言っても、現在のスキーマで動作する (縮小された) クエリを次に示します。

からのMySQLの値を使用していることに注意してくださいDAYOFWEEK。上記の私のコメントに対処すると、クエリが変更されます。

select shop,
  case when hours = "12:00AM - 12:00AM" then "Closed" else hours end as hours,
  min(weekday) as minday,
  max(weekday) as maxday
from (
  select shop, "2" as weekday,
    concat(time_format(d1s,"%h:%i%p"),' - ',time_format(d1e,"%h:%i%p")) as hours
  from Shop_Hours
  union
  select shop, "3",
    concat(time_format(d2s,"%h:%i%p"),' - ',time_format(d2e,"%h:%i%p"))
  from Shop_Hours
  union
  select shop, "7",
    concat(time_format(d6s,"%h:%i%p"),' - ',time_format(d6e,"%h:%i%p"))
  from Shop_Hours
) foo
group by 1,2;

出力は次のようになります。

+------+-------------------+--------+--------+
| shop | hours             | minday | maxday |
+------+-------------------+--------+--------+
|  104 | 08:00AM - 05:00PM | 2      | 3      |
|  104 | Closed            | 7      | 7      |
+------+-------------------+--------+--------+

日のフォーマットはあなたに任せます...

于 2012-10-04T21:34:52.077 に答える