Mysql
 sql >> база данни >  >> RDS >> Mysql

Цени на хотелските стаи за различните сезони

След като сте работили в хотел и сте написали системата за резервации, почасовото време е без значение за таксуването на faras. Всичко винаги се зарежда през нощта. (Освен ако не планирате да управлявате място, което се таксува на час!;-)) Настаняването и напускането са оперативни съображения.

Не използвайте съхранени procuedure, ако наистина искате да напишете реална система за резервации. Това побеждава целта да имате база данни.

Освен това изписването на дати като тази е 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

И, както можете да видите, sql е доста сбит и четим, без да се прибягва до функции или процедури. Това ще може да се мащабира правилно и да се справя с по-сложни въпроси. Освен това позволява да се използва референтна проверка, тъй като данните са базирани на таблица.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи функцията EXPORT_SET() в MySQL

  2. Как да получите общия брой резултати, когато има LIMIT в заявката?

  3. Данните от базата данни за достъп до приложения на C# на Windows не се запазват при затваряне

  4. Избягайте от командните редове на MYSQL чрез Bash скриптове

  5. Създаване на таблица с числа в MySQL