从主SQL查询插入子查询计数

时间:2019-06-12 10:39:50

标签: php sql

我必须在我的电子商务后台列出一些客户订单。

我在php订单页面上工作

此查询工作正常。大约需要4秒钟。 :

 select o.orders_id, o.customers_email_address, o.transaction_id,
 o.customers_name, o.payment_method, o.date_purchased, o.last_modified,
 o.currency, o.currency_value, s.orders_status_name, ot.text as
 order_total
from TABLE_ORDERS  o left join TABLE_ORDERS_TOTAL ot on
 (o.orders_id = ot.orders_id), TABLE_ORDERS_STATUS s
 where o.orders_status = s.orders_status_id
and ot.class = 'ot_total'
order by o.orders_id DESC

我现在尝试添加列出的每个客户的订单总数。

此独立查询也可以正常工作:

select count(o.orders_id) as total_ord
from TABLE_ORDERS o
where o.customers_email_address = '" . $orders['customers_email_address'] . "'

从上一个查询中提取$ orders ['customers_email_address']。

现在该页面花了9到10秒钟来列出客户订单和每个客户的订单数。

有没有一种方法可以合并到主查询和子查询中以减少请求时间? 我尝试了一些左联接,但没有成功。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

首先修复A & BJOIN是过时的,,子句将WHERE变成了LEFT JOIN

您可以尝试使用窗口函数来计算订单总数:

INNER JOIN

答案 1 :(得分:0)

更多内容后:MySql不支持window Function。

因此,在Gordon Linoff的帮助下,我重新编写了与count子查询一起使用的查询。

缺点:14秒!而不是9秒。太糟糕了,我必须像以前一样使用这两个查询。

无论如何我都学不到东西。

工作但查询时间过长:

   select o.orders_id, o.customers_email_address, 
       o.transaction_id, o.customers_name, o.payment_method, 
       o.date_purchased, o.last_modified,
o.currency, o.currency_value, s.orders_status_name, 
       ot.text as order_total,
  (select count(orders_id) FROM TABLE_ORDERS WHERE customers_email_address = o.customers_email_address) as total_ord
      from table_orders o join
     table_orders_total ot
     on o.orders_id = ot.orders_id join
     table_orders_status s
     on o.orders_status = s.orders_status_id
where ot.class = 'ot_total'
order by o.orders_id desc