我不明白这一点:以下两个查询几乎相同,唯一不同的是"和o.shop_id = 1"部分,但他们没有产生预期的结果。
第一个查询:
select count(*) as count
from ek_order o
where 1
and
(
select
s.code
from ek_order_status s
inner join ek_order_has_order_status h on h.order_status_id=s.id
where o.id=h.order_id
order by h.date DESC
limit 0,1
) in ('preparing_order')
查询结果:1
第二个问题:
select count(*) as count
from ek_order o
where 1
and o.shop_id=1
and
(
select
s.code
from ek_order_status s
inner join ek_order_has_order_status h on h.order_status_id=s.id
where o.id=h.order_id
order by h.date DESC
limit 0,1
) in ('preparing_order')
查询结果:0(我预期为1!)
我的架构结构如下所示:
ek_order_has_order_status表有一行如下所示:
在ek_order表中我们可以发现shop_id确实是1:
所以我不明白为什么第二个查询返回0而不是1。 我测试了查询的所有部分,它们似乎工作(我首先测试内部查询,然后测试外部查询,两者都成功),然后,添加"和o.shop_id = 1" part使整个查询失败。
有人知道为什么吗?和/或有一个修复。 (我可以尝试两个查询,但为了提高我的sql知识,我宁愿理解这个问题的底部。)
Ps:基本上,我试图获得包含' prepare_order'的订单数量。状态为最终/最新状态,知道订单可以有多种状态。
答案 0 :(得分:1)
在第二个查询中:
SELECT COUNT(*) as count
FROM ek_order o
WHERE 1
AND o.shop_id=1
...
您正在计算整个ek_order
表,因此对单个记录的shop_id
值来说甚至没有意义。我怀疑你想要的是如果你发现任何记录的shop_id
值为1,那么这就是逻辑真。如果是,那么您可以使用EXISTS
:
SELECT COUNT(*) as count
FROM ek_order o
WHERE 1
AND EXISTS (SELECT 1 FROM ek_order WHERE shop_id=1)
AND ...
如果这不起作用,那么另一种选择是采用shop_id
的最大值:
SELECT COUNT(*) as count
FROM ek_order o
WHERE 1
AND MAX(shop_id) = 1
AND ...
如果您确定此表只有一条记录,并且您只想将其值与计数一起内联,那么这是有意义的。