0

私はそのばかげた質問を知っていますが、私はphpに慣れていないので、どんな助けでも役に立ちます。

私は2つのテーブルを持っています、productそしてpayment

  • 製品テーブルには、、、、..Idがあります。Room_Availableprice
  • 支払いテーブルには、、、、..Idがあります。Product_IdTotal_Room
  • 製品テーブルには多くのレコードがあります

私が期待したのはOccupied_Room <= Room_Available、条件がStatus ='Y'として失敗した場合、それ以外の場合はStatus ='N'の場合、すべての製品レコードを提供することです。

  • cms_product.Room_Available利用可能な部屋の合計です
  • cms_payment.Total_Room 部屋が予約されています

クエリは次のとおりです。

SELECT SUM(cms_payment.Total_Room) as Occupied_Room,
    `cms_product`.`Room_Available` as Available_Room  
FROM 
(
    `cms_product` 
    LEFT JOIN `cms_payment` on (cms_product.`Id` = cms_payment.`Product_Id`)
)
GROUP BY `cms_product`.`Id` 
HAVING Occupied_Room <= Room_Available
4

2 に答える 2

0

それは暗闇の中で少し刺し傷ですが、私はあなたが望むと思います:

SELECT Prod.Id, 
    CASE WHEN COALESCE(SUM(Pay.Total_Room),0) <= Prod.Room_Available THEN 'Y' 
         ELSE 'N'
    END AS Status
FROM cms_product AS Prod
LEFT JOIN cms_payment AS Pay ON Prod.Id = Pay.Product_Id
GROUP BY Prod.Id, Prod.Room_Available

これにより、すべての製品IDとステータス('Y'=利用可能または完全に予約済み、'N'=超過予約済み)が表示されます。

于 2013-01-22T17:09:07.980 に答える
0

これを試してみてください。次の表では、いくつかのサンプルデータを使用しています。ステータスをyまたはに変更できますn:)

SQLFIDDLEデモ

select product.id, 
case when coalesce(x.sm,0) <= product.total_room then 
'available' else 'unavailable' end status,
product.total_room, coalesce(x.sm,0) as rooms_required
from product 
left join (
select payment.product_id, 
sum(payment.room_required) sm
from payment 
group by payment.product_id)x
on x.product_id = product.id
group by product.id
;


| ID |      STATUS | TOTAL_ROOM | ROOMS_REQUIRED |
--------------------------------------------------
|  1 | unavailable |         10 |             12 |
|  2 |   available |         15 |             15 |
|  3 |   available |          5 |              4 |
|  4 |   available |         10 |              0 |
于 2013-01-22T17:09:48.037 に答える