前几天开发密钥系统的时候碰到了一个问题,具体如下
密钥根据产品和其他一些信息生成一个密钥,这个密钥会设置生效时间区间,所以密钥的状态是根据当前时间来进行计算的
然后再产品展示的时候,需要把产品关联的所有密钥数量和生效中的密钥数量查询出来。然后我已开始使用的方式是
select
a.id,a.name,count(b.id),count(c.id)
from product a
LEFT JOIN
secretkey b
on a.id = b.productId
group by a.id
LEFT JOIN secretkey c
on a.id = c.productId
AND a.end_date > now()
AND now() >= a.start_date
group by a.id
最后直接报错了。
最后换一种写法,用多级关联的方式实现
select
p.id,
p.name,
p.allCount,
count(k.id) as effectCount
from
(
select
a.id,
a.name,
count(b.id) as allCount
from
product a
LEFT JOIN
secretkey b
ON b.productId = a.id
Group by a.id
) p
LEFT JOIN
secretkey k
ON
k.productId = p.id
AND now() >= k.start_date
AND k.end_date > now()
Group by p.id
OK ,完美收工