Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql查询_Php_Mysql_Join - Fatal编程技术网

Php mysql查询

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

我知道这是一个愚蠢的问题,但我是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 '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 |