我正在运行 MySQL 查询来获取所有具有当前订单的“用户”。 (用户在数据库/查询中可能有超过 1 个关联订单)。
但是,我还想获取每个用户的总订单值(value)以及返回的每个用户的总订单数(在下面的查询中)。
我可以在 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 中完成这一切?
非常感谢任何建议
最佳答案
您可以将稍加修改的查询嵌入到另一个查询中。例如:
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 行时,查询将失败,这在我发布的示例中永远不会发生。
关于php - 嵌套查询和计算都在同一个查询中 - 这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22275643/