php - 嵌套查询和计算都在同一个查询中 - 这可能吗?

标签 php mysql sql subquery

我正在运行 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/

相关文章:

php - MySQL SELECT SUM 基于另一个表(另一个案例)

sql - Sqlite3中两个日期之间的差异

php - 如何从 mysql var 生成 php echo

php - 如何使 PHP 或 JavaScript 生成 HTML 表单

php - Yii2:isAjax 返回 false

mysql - 为什么 UNSIGNED 不能用于 MYSQL 中的 FOREIGN KEY?

mysql - Envers revinfo 表为空,但 _aud 表正常 - Spring Boot

MySQL 只返回数字行

php - PHP 中的 oop 新手请求澄清概念

php - 将 curl 响应保存到 php 变量中