Php 左联接计数忽略计数中的左表列

Php 左联接计数忽略计数中的左表列,php,mysql,database,Php,Mysql,Database,我有两个表…第一个表有order\u id,order\u status,和user\u id。。。。第二个表有订单id,和产品id,产品数量,如下所示 第一桌 order_id | order_status | user_id ---------------------------- 1 | 5 | 2 2 | 1 | 1 3 | 5 | 1

我有两个表…第一个表有
order\u id
order\u status
,和
user\u id
。。。。第二个表有
订单id
,和
产品id
产品数量
,如下所示

第一桌

    order_id | order_status | user_id
    ----------------------------
    1        | 5            | 2
    2        | 1            | 1
    3        | 5            | 1
    4        | 5            | 1
第二张桌子

order_id | product_id | quantity
----------------------------
1        | 200        | 4
2        | 201        | 2
2        | 200        | 1
2        | 207        | 4
3        | 201        | 1
3        | 200        | 6
4        | 201        | 8
我想去

    user_id | Total_orders | quantity
    ----------------------------
    1       | 2            | 15
    2       | 1            | 4
获取用户标识,其中订单状态=5,按用户标识分组求和(数量)

我的尝试

SELECT h.user_id
     , COUNT(IF(h.order_status = 5,1,0)) AS total_orders
     , SUM(o.quantity) AS quantity 
  FROM table1 h 
  LEFT 
  JOIN table2 o  
    ON o.order_id = h.order_id 
 WHERE h.order_status = 5 
 GROUP 
    BY h.user_id
但是,它给出了计算左表中order_id的所有实例的结果,如。。。状态为5的用户id 1的订单总数为2,但我的查询返回3作为计数(
订单id
)bcz有3个用户id 1传递的订单实例

任何建议或解决方案…我被困很久了:(


谢谢

您需要计算订单id的不同出现次数:

SELECT h.user_id, 
       COUNT(DISTINCT h.order_id) AS total_orders, 
       SUM(o.quantity) AS quantity 
FROM table1 h 
LEFT JOIN table2 o ON o.order_id=h.order_id 
WHERE h.order_status = 5 
GROUP BY h.user_id
另外,在
COUNT
中使用
IF
函数,如下所示:

COUNT(IF(h.order_status = 5,1,0)) AS total_orders
由于
WHERE
子句,订单状态始终等于5,因此没有意义:

WHERE h.order_status = 5