2013-01-22 135 views
0

我知道它的一個愚蠢的問題,但我是新來的PHP,所以任何幫助是有用的。mysql查詢查詢

我有兩個表,productpayment

  • 產品表有IdRoom_Availableprice,...
  • 付款表有IdProduct_IdTotal_Room,...
  • 產品表有很多記錄

我的預期它是否提供所有產品記錄,如果Occupied_Room <= Room_Available,則條件失敗,因爲狀態='Y',否則狀態='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 
+0

那麼什麼是你的問題? –

+2

請提出一個更好,更具描述性的問題標題。 – j08691

+0

@rosipov希望所有的產品,如果條件真實與否與狀態。 – user2001057

回答

0

嘗試一下:下表使用一些示例數據。您可以將狀態更改爲yn :)

SQLFIDDLE DEMO

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 | 
+0

@ user2001057請看看並評論:) – bonCodigo

+0

是的,它幫助。謝謝 – user2001057

+0

@ user2001057請標記爲答案然後,所以每個人都知道你的問題已被回答。 =) – bonCodigo

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' =超額預訂)。

+0

感謝您提供寶貴的時間和您的幫助。 – user2001057