1

私はまだPHP/MySQLに傾倒していますが、StackOverflowのcodiesのおかげでかなりのことを学びました。私は2つのテーブルを使用して一種の部屋予約システムをセットアップしようとしています:


設定:

部屋の価格表:クライアントが借りたいタイプの部屋の価格と、それを使用したい日付(曜日)があります。料金は曜日や部屋ごとに異なります。

部屋のタイプごとに曜日ごとに異なる価格が設定されているため、部屋のタイプごとに異なるテーブルを設定しました。したがって、Alphaルームテーブル、Bravoルームなどがあります。Alphaテーブル内には、行に事前に価格が入力された曜日のヘッダーがあります。

クライアント情報テーブル:特定のクライアントの名前、住所、部屋の使用日などのデータがあります。

例:

アルファルームの料金表: Sun = $ 100; 月=$200; 火=$300など。

ブラボールームの価格表: Sun = $ 100; 月=$200; 火=$300など。

クライアントデータテーブル: ClientName; 部屋の使用日; 住所; day_subtotal; 総計。

質問:

私は次のようなPHPコードを見つけようとしています。

  1. クライアントデータテーブルで部屋の使用日を確認します。
  2. 特定の部屋の料金表でその日付に関連する費用を調べます。
  3. その単価をクライアントデータテーブルの1日の小計に記録します
  4. そして、クライアントデータテーブルの総計行に総計を合計します(部屋が顧客によって1日以上使用される可能性があると想定)。

参加と関係があることは知っていますが、概念を理解するのが難しいと感じています。誰かがこの例を使用してデモンストレーションできれば、この種のトランザクションの処理方法をよりよく理解できると思います。

あなたの提案や代替アプローチを事前にすべてに感謝します。

4

1 に答える 1

5

まず、データベースを少し分離する必要があります。4 つのテーブルが必要です。roomspricesclientsおよびbookings。このような設定...

rooms次のフィールドが必要です: idnameおよびdescription

prices次のフィールドが必要です: idpriceroom_idおよびday

clients次のフィールドが必要です:idそして、姓名、電話番号など、ユーザーに保存したいものは何でも。

bookings次のフィールドが必要です: idclient_idroom_idstarted_atおよびended_at。andフィールドは、PHP のメソッドで埋められた int であることが望ましいstarted_atです。ended_attime()

必要なフィールドをテーブルに追加できます。

このようにテーブルを分離すると、データベースに対して適切にクエリを実行できます。だからあなたの質問に答えるために...

  1. 使用中の部屋の日付を見てください...次のようにして、特定の日に部屋が使用されているかどうかを照会できます...

    <?php
    $selectedDate= mktime(); // Create a UNIX timestamp based on the day the user selected.
    $query = "SELECT r.name, r.description
              FROM rooms r, bookings b
              WHERE b.room_id = r.id
              AND b.started_at < $selectedDate
              OR b.ended_at > $selectedDate";
    $result = $pdo->query($query);
    ?>
    
  2. その日の費用を調べる

    <?php
    $selectedDate = mktime() // Create a UNIX timestamp based on the day the user selected
    $dayOfWeek = Date('N', $selectedDate); // This will give the numerical day of the week.
    $query = "SELECT price
              FROM prices
              WHERE room_id = $roomId
              AND day = $dayOfWeek";
    $result = $pdo->query($query);
    ?>
    
  3. その単価をクライアント テーブルに記録します。

    すでに別のテーブルに情報があるため、これを行うのはばかげています。データベースに同じ情報を再作成しないでください。そうであれば、データベースを正しく構築していません。

  4. 顧客テーブルの総計

    繰り返しますが、ばかげています...データを再作成しないでください...

    1. ただし、その情報を見つけるには、まず予約テーブルに対してクエリを実行し、ユーザーが部屋を占有する開始日と終了日を確認する必要があります。

    2. クライアントが部屋にいる時間を計算すると、(ended_at - started_at) / 86400 (86400 は 1 日の秒数) で、クライアントが部屋にいる日数がわかります。

    3. クライアントがルームに滞在する曜日と時間を把握したので、必要な曜日を選択する SQL 呼び出しを動的に作成できますDate('N', $timeStamp)

    4. あとは簡単な足し算をするだけです。

ここで基本事項を説明しました。回答 1 のクエリを変更して、ユーザーが要求した時間枠内に部屋を予約できるかどうかを表示できます。

あなたが尋ねたことがすべてカバーされていることを願っています...

于 2012-10-02T03:34:32.807 に答える