在LEFT JOIN子查询中显示COUNT个?

时间:2011-08-30 18:48:43

标签: php mysql subquery left-join

我有一个查询,用于选择所选时间段之间的订单信息。我想要包含一个where子句,它将订单信息限制为所有只有1个订单总数的订单(通过所有时间)。

这是我到目前为止所做的:

SELECT o.orders_id, o.customers_id, o.customers_name, o.payment_method, o.date_purchased,o.orders_status, o.shipping_status, ot.value 
FROM orders as o 
LEFT JOIN orders_total as ot ON o.orders_id = ot.orders_id 
WHERE date_purchased between '2011-07-30' AND '2011-08-30 23:59:59' 
AND ot.class = 'ot_total' 
AND o.customer_service_id = '' 
OR o.customer_service_id IS NULL 
ORDER BY orders_id DESC 

此查询为我提供指定时间段内的所有订单。我需要包含一个子查询(或类似的东西)来计算所有先前(通过所有时间)订单(order_count)BY customers_id。然后包括'HAVING order_count<在where子句中的2'。

这可能吗?这有意义吗?

1 个答案:

答案 0 :(得分:2)

只需在你关闭的地方添加:

AND (
    SELECT COUNT(o.id)
    FROM   orders o2
    WHERE  o2.customers_id = o.customers_id
) < 2

或者,如果要返回订单计数,请将其添加到SELECT子句中,然后添加HAVING子句:

SELECT o.orders_id, ..., (
    SELECT COUNT(o.id)
    FROM   orders o2
    WHERE  o2.customers_id = o.customers_id
) as orders_count
...
HAVING orders_count < 2