2016-05-02 10 views
0

私はテーブルを持っています。レンタル期間とレンタカー料金に関する情報を保有する注文があります。平日と週末の価格が異なります

Table Orders

Table Cars

価格は次式で与えられます。

SELECT ROUND((points * (SELECT DATEDIFF('$dateTo', '$dateFrom'))) * 0.95) AS price 

$dateTo$dateFromユーザが指定した日付範囲の値を保持しているPHPの変数です。他の言葉で:

$dateTo = $_POST['date-to']; 
$dateFrom = $_POST['date-from']; 

だから、毎日のためにあなたはレンタル価格から5%オフ与えられているが、私はまた、日付範囲が土曜日または日曜日を横切るかどうかを確認します。レンタルが金曜日から月曜日の場合、日付範囲に土曜日が含まれているため、総額に10ポイントを追加します。

これは可能ですか?

+0

私はあなたが「によって何を意味するかについて少し困惑している*レンタルは月曜日に金曜日からのものである場合、I日付範囲に土曜日*が含まれているため、合計金額に10ポイントを追加します。なぜ月曜日まで、そして日曜日までではないのですか?もし彼らが金曜日に1日間それを借りたら?土曜日から賃貸して翌日に返却すればどうなるでしょうか? – Mike

+0

@Mike - 日付範囲をとり、週末の日がその範囲に入るかどうかを判断できるクエリまたはコードが必要です。それが起こった場合、彼らは価格に10を加える必要があります。彼らはこの状況で具体的な例を挙げているだけです。問題は、 "私は少なくとも少しは一般的な、"価格に10を追加することです。あなたは更新が必要なので、データベースのエントリを変更したいですか?表示されるものだけを変更したいですか?この変更によって実際に影響を受けるのは何ですか? – Dresden

+0

@MikeSあなたは正しいかもしれませんが、それは私の具体例のようには見えません。 – Mike

答えて

0

この目的のために、ループをネストして平日かどうかを確認するストアドプロシージャを使用できます。日付の範囲はそうのようなPHPを使用して、その中の週末を持っている場合 また、あなたがチェックすることができ:

<?php 

    /** 
    * FUNCTION THAT CHECKS IF A WEEKEND EXISTS BETWEEN 2 GIVEN DATES 
    * @param string $startDate 
    * @param string $endDate 
    * @return boolean 
    */ 
    function dateRangeContainsWeekend($startDate, $endDate) { 
     $tsDate = strtotime($startDate); 
     $diff = date_diff(date_create($startDate), date_create($endDate)); 
     $dDiff = $diff->days; 

     if ($dDiff > 0) { 
      for ($i = 0; $i < $dDiff; $i++) { 
       $timeDiff = 24 * 60 * 60 * $i; 
       $sDate  = $tsDate + $timeDiff; 
       $weekDay = date('w', $sDate); 

       if (($weekDay == 0 || $weekDay == 6)) { 
        return ($weekDay == 0 || $weekDay == 6); 
       } 
      } 
     } 
     return false; 
    } 

    // TESTS - - - - 
    $d1 = "2016-05-02"; 
    $d2 = "2016-05-10"; 
    var_dump(dateRangeContainsWeekend($d1, $d2)); // DUMPS true 

    // NOW; IF YOU KNOW THAT THE GIVEN DATES CONTAIN A WEEKEND, 
    // YOU MAY MODIFY YOUR QUERY TO REFLECT YOUR DESIRES 
    $factor = "0.95"; //CHOOSE YOUR FACTOR HERE... 
    $sql = "SELECT ROUND((points * (SELECT DATEDIFF('$dateTo', '$dateFrom'))) * $factor) AS price"; 
関連する問題