Php mysql查询
我知道这是一个愚蠢的问题,但我是php新手,所以任何帮助都是有用的 我有两张表,Php mysql查询,php,mysql,join,Php,Mysql,Join,我知道这是一个愚蠢的问题,但我是php新手,所以任何帮助都是有用的 我有两张表,产品和付款: 产品表有Id,房间可用,价格 付款表有Id,Product\u Id,Total\u Room 产品表有很多记录 我所期望的是,如果有人占用了_Room,它会给出所有的产品记录,这有点像暗中捅了一刀,但我想你想要: SELECT Prod.Id, CASE WHEN COALESCE(SUM(Pay.Total_Room),0) <= Prod.Room_Available THEN
产品
和付款
:
- 产品表有
,Id
,房间可用
价格
- 付款表有
,Id
,Product\u Id
Total\u Room
- 产品表有很多记录
我所期望的是,如果
有人占用了_Room,它会给出所有的产品记录,这有点像暗中捅了一刀,但我想你想要:
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,
合并时的情况(SUM(Pay.Total_Room),0)尝试:下表使用了一些示例数据。您可以将状态更改为y
或n
:)
选择product.id,
案例合并(x.sm,0)时,您的问题是什么?请提出一个更好、更具描述性的问题标题。@如果条件为真或不为真,罗西波夫希望所有产品都与状态相关。我对您的问题进行了编辑,使其至少可读,但1)您两次谈论付款
表字段,而不是产品
,2)这真的是你的疑问吗?因为派生表很奇怪,3)您真的需要一个更好的标题,4)您的问题是什么?看起来添加一个实际问题可以帮助StackOverflow读者理解您的问题。@user2001057请查看并发表评论:)@user2001057请将其标记为答案,所以每个人都知道你的问题已经得到了回答谢谢你给我宝贵的时间和帮助。
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
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 |