2012-10-04 20 views
1

查看了可能已經有我的答案的其他問題,我認爲這個問題有一定的幫助。我有一個業務模板網站,其中大部分具有相同的開始和結束時間 - 週一。 - 週五,週六關閉。但是,有些人可能會在週五早些時候關閉,並在週六開放。我相信週日所有人都會關門。如何從mySQL格式化營業時間表

我創建了一個表作爲這樣的 -

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

我的問題涉及到如何使用傳統的ASP,查詢記錄,顯示一些的這些例子:

Mon. - 週五08:00 AM - 5:00 PM

關閉週末

OR

星期一 - 釷。 8:00 AM - 5:00 PM

Fri. - 上午8:00 - 下午4:00

週六 - 8:00 AM - 12:00 PM`

OR

等等

我認爲有多種方法可以做到這一點,我只是想知道,如果

  • 我的數據庫結構可以嗎?
  • 什麼是最有效的方法來獲得我的目標最終結果?

當然希望能對此有所幫助。

回答

0

你的架構中的某些評論:

  1. 使用更好的變量名。 'd1s',是星期天還是星期一? 'starttime_monday',也許?
  2. '00:00:00'的默認值是'午夜'。也許默認的NULL會更好。
  3. 我的答案在下面的第一件事是將您的列翻轉成行。你可能會考慮以這種方式存儲它們。
  4. 如果大多數公司的小時數相同,則爲每個人存儲值都是低效的。只存儲例外。

這就是說,這是一個(簡化)查詢,適用於您當前的模式。

請注意,我使用的是來自DAYOFWEEK的MySQL值,如果您在上面說明了我的意見,則查詢將會改變。

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  | 
+------+-------------------+--------+--------+ 

哪幾天格式留給你......

+0

WOW,這太神奇了,謝謝你這麼多。我將不得不研究你提供的所有內容,並回答你我提出的一些問題。再次感謝您花時間幫助我阿蘭。湯姆 –