Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

विभिन्न मौसमों के लिए होटल के कमरे की दरें

एक होटल में काम करने और आरक्षण प्रणाली लिखने के बाद, प्रति घंटा समय अप्रासंगिक है क्योंकि फरस बिलिंग जाता है। सब कुछ हमेशा रात में चार्ज होता है। (जब तक आप ऐसी जगह चलाने की योजना नहीं बनाते जो घंटे के हिसाब से चार्ज हो!;-)) चेक-इन और चेक-आउट परिचालन संबंधी विचार हैं।

यदि आप वास्तव में एक वास्तविक आरक्षण प्रणाली लिखना चाहते हैं तो संग्रहित प्रक्रियाओं का उपयोग न करें। यह डेटाबेस रखने के उद्देश्य को हरा देता है।

साथ ही, इस तरह की तारीखों को 2007-04-29 लिखना वास्तव में बहुत अच्छा तरीका है क्योंकि हर कोई एक ही जगह से नहीं है और यह एक अंतरराष्ट्रीय मानक है। यह भी ध्यान दें, अगर आप इसे एक स्ट्रिंग में बदलना चाहते हैं तो यह अभी भी सही ढंग से सॉर्ट किया जाएगा!

आपको एक कैलेंडर तालिका बनाने की आवश्यकता है क्योंकि MySQL में इसे करने के लिए अंतर्निहित कार्य नहीं हैं। यह प्रक्रिया आपके लिए तिथियों का निर्माण करेगी।

drop table if exists calendar;
create table calendar 
( 
    date_       date        primary key
);

drop procedure fill_calendar;

delimiter $$
create procedure fill_calendar(start_date date, end_date date)
begin
  declare date_ date;
  set date_=start_date;
  while date_ < end_date do
    insert into calendar values(date_);
    set date_ = adddate(date_, interval 1 day);
  end while;
end $$
delimiter ;

call fill_calendar('2007-1-1', '2007-12-31');

से:http://www.ehow.com/how_7571744_mysql-calendar-tutorial.html

drop table if exists rates;
create table rates
(
    season          varchar(100)    primary key,
    start_date      date            references calendar(date_),
    end_date        date            references calendar(date_),
    rate            float
);
insert into rates values ('Low',    '2007-01-01',   '2007-04-30',   100.00);
insert into rates values ('High',   '2007-05-01',   '2007-08-31',   150.00);
insert into rates values ('Peak',   '2007-09-01',   '2007-12-21',   200.00);

select * from rates;
season  start_date      end_date        rate
Low     2007-01-01      2007-04-30      100
High    2007-05-01      2007-08-31      150
Peak    2007-09-01      2007-12-21      200

मैं आपके द्वारा अपने प्रश्न में दी गई तारीखों को अनदेखा करने जा रहा हूं और मान लीजिए कि ग्राहक समय पर पीछे की ओर यात्रा नहीं कर रहा है।

select
    date_, rate
    from calendar
    join rates
        on date_ >= start_date and date_ <= end_date

    where date_ between '2007-04-29' and '2007-5-01'
;
date_   rate
2007-04-29      100
2007-04-30      100
2007-05-01      150

select
    sum(rate)

    from calendar
    join rates
        on date_ >= start_date and date_ <= end_date

    where date_ between '2007-04-29' and '2007-5-01'
sum(rate)
350

और, जैसा कि आप देख सकते हैं कि एसक्यूएल कार्यों या प्रक्रियाओं का उपयोग किए बिना काफी संक्षिप्त और पठनीय है। यह ठीक से स्केल करने और अधिक जटिल प्रश्नों को संभालने में सक्षम होगा। साथ ही, यह संदर्भात्मक जाँच को उपयोग करने में सक्षम बनाता है क्योंकि डेटा तालिका आधारित है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL मेरे टाइमस्टैम्प मानों को 0000-00-00 . में बदल रहा है

  2. क्रॉन जॉब्स का उपयोग करके MySQL डेटाबेस का बैकअप कैसे लें

  3. पदावनत:mysql_connect ()

  4. डेटा इनफाइल और लोड डेटा लोकल इनफाइल के बीच अंतर

  5. क्या mysql में अपना वर्तमान उपयोगकर्ता नाम जानने का कोई तरीका है?