>source

2019-02-15 8:30:00 ~ 2019-02-16 8:30:00의 특별 요금이 $400 인 예약 시스템이 있습니다. 객실의 정상 요금은 $360입니다. 추가 시간 요금은 $30입니다. 누군가 2019-02-14 08:30:00 ~ 2019-02-17 11:30:00에 예약하면 금액을 어떻게 계산합니까? mysql PHP를 도와주세요.

테이블 #room

+----+--------+------+-----------+
| ID |  room  | rate | hrly_rate |
+----+--------+------+-----------+
|  1 | room 1 |  360 |        30 |
+----+--------+------+-----------+

표 #special_calendar

+----+--------+------+--------------------+--------------------+
| ID |  room  | rate |     start_date     |      end_date      |
+----+--------+------+--------------------+--------------------+
|  1 | room 1 |  400 | 2019-02-15 8:30:00 | 2019-02-16 8:30:00 |
+----+--------+------+--------------------+--------------------+

예상 출력 :-

Iteration 1: 2019-02-14 08:30:00 - 2019-02-15 08:30:00  Amount $360
Iteration 2: 2019-02-15 08:30:00 - 2019-02-16 08:30:00  Amount $400
Iteration 3: 2019-02-16 08:30:00 - 2019-02-17 08:30:00  Amount $360
Iteration 4: 2019-02-17 08:30:00 - 2019-02-17 11:30:00  Amount $90 (3 X hourly rate)
Total Amount: 1210

예약을 위해 텍스트 상자에서 입력을 받고 있습니다.

Check in: 2019-02-14 08:30:00
Checkout: 2019-02-17 11:30:00

<시간>

코드 아래에 있지만 500 오류가 발생합니다

   $amt=0;
    $chekin_date=date("Y-m-d H:i:s", strtotime($_GET['chekin_date']));
    $checkout_date=date("Y-m-d H:i:s", strtotime($_GET['checkout_date']));
    $query_result=$this->general->execute_query2("SELECT * from special_calendar where category_id='$row->id' and '$chekin_date'<=start_date && end_date<='$checkout_date'");
         if(!empty($query_result)){
            while($chekin_date<$checkout_date)
              {
                foreach($query_result as $result)
                {
                    if($result->start_date<=$chekin_date && $checkout_date<$result->end_date)
                   {
                     $amt = $amt+$result->rate;  
                   }
                   else
                   {
                     //normal rate
                     $amt = $amt+$row->rate_day;
                   }
                }
                 // increase check in date by 1
$datetime = new DateTime($chekin_date);
$datetime->modify('+1 day');
 $chekin_date = $datetime->format('Y-m-d H:i:s');
              }
         }
          else
            {
            $hrdif= $this->general->dateDifference($chekin_date , $checkout_date , $differenceFormat = '%h' );
              $daydif= $this->general->dateDifference($chekin_date , $checkout_date , $differenceFormat = '%a' );
              $amt=$amt+($daydif*$row->rate_day);
              if($hrdif!=0){
            $amt=$amt+($hrdif*$row->hrly_rate);
        }
       }
        echo $amt;


  • 답변 # 1

    먼저 입장이 있으면 특별 달력 표를 검색 한 다음 요금을 가져와야합니다. 그렇지 않은 경우 쿼리에서 합계를 가져옵니다

       //below code Logically presented. proceed with your content
        $amt=0;
        $query = check_in<=special_check_in && special_check_out<=check_out
        $query_result = store result;
        if($query_count>0)
        {
          while($check_in<$check_out)
          {
            foreach($query_result as $result)
            {
               if($result[special_check_in]<=$check_in && $check_in<$result[special_check_out])
               {
                 $amt = $amt+$result['special_rate'];  
               }
               else
               {
                 //add room table rate fetch by using query
                 $amt = $amt+$room_table_rate
               }
            }
            check_in = check_in+1 // increase check in date by 1
          }
        }
        else
        {
           $query = "select SUM(rate) FROM room_table where room_id=your_room_id";
           $amt = $query_result_sum;
        }
    echo $amt; //this is your final booking rate
    
    

  • 이전 php - SQLSTATE [HY000] [1044] PhpMyAdmin 데이터베이스 테이블에 업로드 할 때 사용자 ''@ 'localhost'에 대한 액세스가 거부되었습니다
  • 다음 중첩 된 배열과 반응하는 중첩 된 렌더링