3

次の2つの表を考慮してください。

Holidays
HolidayID (PK)
Destination
Length
MaximumNumber
...


Bookings
BookingID  (PK)
HolidayID (FK)
Name
...

顧客は休日を予約できます(たとえば、ハワイに行く)。ただし、特定の休日に最大数の場所があるとします。たとえば、今年のハワイの休日は75回だけです(他の年は無視します)。

したがって、一部の顧客がハワイへの休暇を予約したい場合。予約テーブルのレコードを数える必要があり、その数が75を超える場合は、手遅れであることを顧客に伝える必要があります。これは、2つのMySQLクエリ(1つは休日のMaximumNumberを取得し、2つはBookingsから現在の合計を取得する)とPHP(たとえば)を使用して、カウント値をハワイの休日の最大数と比較することで実行できます。しかし、これを純粋にSQL(この場合はMySQL)で行う方法があるかどうか知りたいですか?つまり、ハワイの予約数を数え、ハワイのMaximumNumber値と比較します。

編集:私の方法:

$query1 = "SELECT MaximumNumber FROM Holidays WHERE HolidayID=$hawaiiID";

$query2 = "SELECT COUNT(BookingID) FROM Bookings WHERE HolidayID=$hawaiiID";

したがって、最初のクエリで75が得られ、2番目のクエリで75が得られた場合、PHPでこれらの値を比較できます。しかし、SQLだけでこれを行う方法があるのではないかと思いました。

4

3 に答える 3

0

あなたはこのようなことを試みるかもしれません:

select case when b.freq < h.MaximumNumber
            then 'Available'
            else 'Not Available'
            end as MyResult
from Holidays h
left join (
   select HolidayID
        , count(*) as freq
   from Bookings
   where HolidayID=$hawaiiID
   group by HolidayID
   ) b
on h.HolidayID=b.HolidayID
于 2013-02-10T15:36:44.583 に答える
0

何かが足りないかもしれませんが、サブクエリを使用して各holidayidの合計予約数を決定してみませんか。

select *
from holidays h
left join
(
  select count(*) TotalBooked, HolidayId
  from bookings
  group by holidayId
) b
  on h.holidayId = b.holidayId
WHERE h.HolidayID=$hawaiiID;

SQL FiddlewithDemoを参照してください。

次に、式を使用して、を次のようなものCASEと比較できます。TotalBookedMaxNumber

select h.destination,
  case 
    when b.totalbooked = h.maxNumber
    then 'Not Available'
    else 'You can still book' end Availability
from holidays h
left join
(
  select count(*) TotalBooked, HolidayId
  from bookings
  group by holidayId
) b
  on h.holidayId = b.holidayId
WHERE h.HolidayID=$hawaiiID;

SQL FiddlewithDemoを参照してください。

テーブルに一致する行がない場合でもLEFT JOIN、テーブルからすべての行を返すaを使用したことに気付くでしょう。HolidaysBookings

于 2013-02-10T15:33:32.327 に答える
0

このようなものが機能します。あなたは詳細を記入することができます:

select case 
when 
(select count(*) 
from Bookings 
where holidayID = $hawaiiid) 
<= MaximumNumber then 'available' else 'sold out' end status
from holidays 
etc
于 2013-02-10T15:33:39.927 に答える