php - 使用sql从数据库中选择数据

标签 php html mysql sql

我有一个 sql 子选择来列出有多少订单及其总值(value):

SELECT u.name,
  (SELECT COUNT(*) FROM orders o WHERE o.user_id=u.id
  ) AS order_count,
  (SELECT SUM(oi.quantity * p.price)
  FROM orders            AS o
  INNER JOIN order_items AS oi
  ON oi.order_id = o.id
  INNER JOIN products AS p
  ON p.id        = oi.product_id
  WHERE o.user_id=u.id
  ) AS total_price
FROM users u
ORDER BY total_price DESC

有什么想法如何在不进行子选择的情况下做到这一点吗?

最佳答案

您可以将相关子查询(O(N^2) 性能)转换为 LEFT JOIN

SELECT u.name,
  o.order_count,
  o2.total_price
FROM users u left join (
  SELECT user_id, COUNT(*) order_count
  FROM orders
  GROUP BY user_id
) o
on u.id = o.user_id
left join (
  SELECT o.user_id, SUM(oi.quantity * p.price) total_price
  FROM orders o
  INNER JOIN order_items oi
  ON oi.order_id = o.id
  INNER JOIN products p
  ON p.id        = oi.product_id
  GROUP BY o.user_id
) o2 on u.id = o2.user_id
ORDER BY total_price DESC;

关于php - 使用sql从数据库中选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41723928/

相关文章:

php - 用户付款时显示字形或图像?

php - 错误 : 'Invalid parameter number: parameter was not defined' when using an array to INSERT in PDO

php - jQuery "world"动画

javascript - 如何在html中输入文本作为提交按钮?

html - 基本问卷输入如何设置左侧问题和右侧 radio 的样式

mysql - 如果第一个 SELECT 返回一个空集,则另一个 SELECT

php - XDebug 未加载到 PHP(Vista、Apache 模块)中

javascript - HTML5 本地存储和 SQL

php - Laravel 高级搜索查询

mysql - Laravel MySQL JSON LIKE 查询