前幾天開發密鑰系統的時候碰到了一個問題,具體如下
密鑰根據産品和其他一些資訊生成一個密鑰,這個密鑰會設定生效時間區間,是以密鑰的狀态是根據目前時間來進行計算的
然後再産品展示的時候,需要把産品關聯的所有密鑰數量和生效中的密鑰數量查詢出來。然後我已開始使用的方式是
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 ,完美收工