0

最大(データが1つ以上に存在する場合)の4行までの名前のカウント(後でレートで乗算するため)を取得しようとしています。言い換えれば、部屋を占有する一人当たりの価格があります。そこで、フォームに入力してデータベーステーブルに保存した名前で部屋の人数を数えたいと思います。

名前フィールドに入力するだけでなく、ユーザーが人数を選択するフィールドを追加するだけでもかまいませんが、これは冗長に思えます(エラーが発生しやすくなります)。

設定

表:1。列を持つクライアント:

id, 
tourbk_id, 
tourstart, 
roomtype1, 
client1_name, 
client2_name, 
client3_name, 
client4_name

質問

現在、部屋のタイプをその部屋のタイプの1人あたりの価格にチェックし、結果を生成するように取り組んでいるクエリがありますが、もちろん、2人部屋の価格の人のみが返されます(部屋に2人の場合)。

例:(一人当たりの価格)...シングル= $ 10; double = $ 20; トリプル=$30; クワッド=$40

ダブルルームの現在の結果は$20です(これは「1人あたりの価格」の横にあります。このダブルの合計人数をカウントし、レートの倍数にするクエリが必要です...「合計:クエリ[$ 20*2]」

テーブル内の「 client_name」エントリをカウントするクエリをコーディングするにはどうすればよいですか?

4

3 に答える 3

0

単一の名前列を単一の予約識別子に関連付ける個別のテーブルを用意して、スキーマを正規化することを検討する必要があります。複数のクライアントは、その新しいテーブルの複数のレコードによって表されます。次のようにクライアントを数えます。client_names

SELECT COUNT(*) FROM client_names WHERE booking_id = ...

ただし、現在の構造では(そして、そのようなクライアントがない場合は名前列があると仮定してNULL)、次のことができます。

SELECT (client1_name IS NOT NULL)
     + (client2_name IS NOT NULL)
     + (client3_name IS NOT NULL)
     + (client4_name IS NOT NULL)
    AS client_count
FROM   clients
-- etc.
于 2012-10-22T23:21:39.297 に答える
0

ClientCountここに、部屋のクライアントの数であるという名前の仮想列を追加しました。client1_name > ''空白でもNULLでも機能し、質問する手間が省けるので、私は使用するのが好きです。

SELECT
    id, 
    tourbk_id, 
    tourstart, 
    roomtype1, 
    client1_name, 
    client2_name, 
    client3_name, 
    client4_name,
    CASE WHEN client1_name > '' THEN 1 ELSE 0 end +
    CASE WHEN client2_name > '' THEN 1 ELSE 0 end +
    CASE WHEN client3_name > '' THEN 1 ELSE 0 end +
    CASE WHEN client4_name > '' THEN 1 ELSE 0 end    ClientCount
FROM TBL
于 2012-10-22T23:25:35.747 に答える
0

そして、それを行うための回り道として、私は次のことも機能することを考えました(1、2、3、および4のケースを作成する必要があります["if roomtype1 ='sgl'、then $ mult = 1、roomtype ='dbl'の場合、$ mult = 2 ...]乗数を使用して、他の部屋のタイプを確認します):

$total = ($roomrate['roomprice'] * 2);
     echo "Total this booking : ";
     echo $total;

助けてくれてありがとう!

于 2012-10-22T23:35:39.910 に答える