我必须在我的电子商务后台列出一些客户订单。
我在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秒钟来列出客户订单和每个客户的订单数。
有没有一种方法可以合并到主查询和子查询中以减少请求时间? 我尝试了一些左联接,但没有成功。
感谢您的帮助
答案 0 :(得分:0)
首先修复A & B
。 JOIN
是过时的,,
子句将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