0

部屋のタイプごとに、その位置(おそらく序数ですが、単に日の位置)で日を数えたいと思います。たとえば、まったく同じ期間 ( 2012-11-30~ から2012-12-06) に予約された 2 つのタイプの部屋があります。そして、各部屋タイプの毎日をカウントする必要があります。

下の表をご覧ください。

ここに画像の説明を入力

day日の位置を実行するための列が必要です。基本的に、mySQL を次のように記述しました。

SELECT ????? , booking_customer.bkcus_date AS DATE, villas_db.v_name AS vname, booking_customer.bkcus_rate AS cost
FROM booking_customer
INNER JOIN villas_db ON booking_customer.bkcus_vid = villas_db.v_id
WHERE booking_customer.bkcus_sid =  '<sid>'
LIMIT 0 , 30

?????そのような数を実行するために必要なコードはどこにありますか。ですから、これを行うためのより良い方法があれば、私に提案していただけませんか - たとえば PHP。

よろしく、

4

2 に答える 2

1

リクエストに応じて、非常に醜い 2 クエリ SQL ハックとして:

SET @cntr = null, @prev=null;

SELECT IF((@prev <> vname) or (@prev is null)),
    @cntr := 1, @cntr := @cntr + 1) AS day,
    @prev := vname,
    etc...
FROM ...
...

これは、メインの並べ替え順序がスクリーンキャップにある場合にのみ機能します。並べ替え順序を変更し始めると、まったく異なる一連の数字が得られます

于 2012-11-29T17:26:36.737 に答える
1

ここで本当に SQL ソリューションが必要な場合は、次のような追加のステートメントは必要ありません。SET @counter = 0;

// 2 回目の編集

SELECT IF((@counter := @counter + 1) < 8, @counter, @counter := 1 ) AS day,
    booking_customer.bkcus_date AS DATE, 
    villas_db.v_name AS vname, 
    booking_customer.bkcus_rate AS cost
FROM (SELECT @counter:=0) AS c, booking_customer
INNER JOIN villas_db ON booking_customer.bkcus_vid = villas_db.v_id
WHERE booking_customer.bkcus_sid =  '<sid>'
LIMIT 0 , 30
于 2012-11-29T16:43:12.667 に答える