2014-03-03 109 views
1

分配常數有一個表MySQL查詢計數和基於範圍

成員:
ID - 的會員ID,
dt_activate - 成員的加盟UNIX日期時間,
id_inviter - 會員ID是誰做邀請現任成員(0如果成員自己加入)

試圖編寫一個Select將返回以下多行結果,其中每行將包含:
(1)id - member id;
(2)cnt - MEMBERS表中的行數,其中該「id」出現在id_inviter字段中,同時dt_activate應該在常量dt_start和dt_end之間;如果cnt在10-19之間,則爲「imageA.gif」,如果在20-29之間爲「imageB.gif」,如果大於29,則爲「imageC.gif」;
(4)獎勵 - 恆X當CNT在10-19之間,Y如果20-29,Z如果大於29

不幸的是我的知識不讓我走過去的簡單的選擇等之間:

SELECT id_inviter, sum(1) AS cnt 
FROM members 
WHERE dt_activate>=$dt_start AND dt_activate<=$dt_end 
GROUP BY id_inviter 
HAVING cnt>=10 

MEMBERS表的估計記錄數可能在10-50k之間。

請幫忙達成上述結果,謝謝。

回答

0

試試這個:

SELECT id_inviter, count (*) AS cnt, 
case when count (*) <20 then 'imageA.gif' 
when count (*) <30THEN 'imageB.gif' else 'imageC.gif' end as image, 
case when count (*) <20 then 'X' 
when count (*) <30 THEN 'Y' else 'Z' end as reward 
FROM members 
WHERE dt_activate>=$dt_start AND dt_activate<=$dt_end 
GROUP BY id_inviter 
HAVING cnt>=10 
+0

感謝您的回答,您有什麼看法是否COUNT(*)的multipple出現不會顯着與10-50k記錄減緩選擇的執行在桌子上?謝謝 – Maris

+0

50k仍然是一張中等的桌子。只要確保你有一個索引id_inviter –

+0

得到它! :) 謝謝 – Maris