嵌套查询和计算都在同一个查询中 - 是否可能?

时间:2014-03-08 22:04:50

标签: php mysql sql nested-queries

我正在运行MySQL查询以获取所有"用户"目前的订单。 (用户可以在db / query 中拥有多个关联订单。)

但是,我还想获得每个用户的总订单价值以及每个用户的总订单数(在下面的查询中)。

我可以在PHP中进行这些计算,但感觉它是可能的,并且在同一个SQL查询中完成所有操作(如果可能的话)。

这是基本查询,不试图进行上述计算

SELECT u.UserID, u.UserName,
  o.OrdersID, o.OrderProductName, o.OrderProductQT, o.OrderTotalPrice, o.tUsers_UserID,     o.tOrderStatus_StatusID, o.OrderDate, o.OrderDateModified, o.OrderVoid, o.tProducts_ProductID,
 os.OrderStatusName,
  ud.UserDetailsName, ud.UserDetailsPostCode,
  p.ProductName, p.ProductImage1                    
FROM tusers u
  INNER JOIN torders o ON o.tUsers_UserID =  u.UserID   
  INNER JOIN torderstatus os ON os.OrderStatus_StatusID = o.tOrderStatus_StatusID
  INNER JOIN tuserdetails ud ON ud.tUsers_UserID = u.UserID
  LEFT JOIN tproducts p ON p.ProductID = o.tProducts_ProductID          
WHERE o.tOrderStatus_StatusID = ?
GROUP BY u.UserID
ORDER BY OrdersID DESC

我尝试了各种嵌套的选择查询,但没有一个能正常工作(右)

我想在SQL中做什么,或者我应该在PHP中使用返回的查询结果完成所有操作?

非常感谢任何建议

1 个答案:

答案 0 :(得分:1)

您可以将稍微修改过的查询嵌入到另一个查询中。例如:

SELECT userid, SUM(orderid) FROM orders GROUP BY userid

SELECT userid, SUM(distinct productid)
FROM
  orders o
  INNER JOIN orderlines ol on ol.orderid = o.orderid
GROUP BY
  userid

可以合并到:

SELECT
  u.userid
  u.fullname,

  (SELECT SUM(orderid) 
   FROM orders o
   WHERE o.userid = u.userid) as ORDERCOUNT,

  (SELECT SUM(distinct productid)
  FROM
    orders o
    INNER JOIN orderlines ol on ol.orderid = o.orderid
  WHERE
    o.userid = u.userid) as UNIQUEPRODUCTS
FROM
  users u

请注意,后面的查询将返回所有用户,并且当子查询未返回任何内容时(当用户没有订单时),将返回NULL ORDERCOUNT或UNIQUEPRODUCTS。此外,当子查询返回多于1行时,查询将失败,这在我发布的示例中永远不会发生。