2015-10-03 31 views
0

我有這樣的數據庫表:membershipMysql的選擇,並通過案例在一個順序計數時...查詢

id name  email    level  memberdate 
1 Joe  [email protected]  silver  04/09/2015 
2 Peter  [email protected] bronze  05/09/2015 
3 John  [email protected]  gold  06/09/2015 
4 Jack  [email protected]  bronze  09/09/2015 

我用這個查詢,首先顯示與水平=青銅人。

select * 
from membership 
order by 
    case 
    when level = 'bronze' then 1 
    else 2 
    end, 
    memberdate desc; 

此外,我想在同一個查詢中有多少人指望用水平= bronze以上。在這種情況下計數結果應該是2。我怎樣才能做到這一點?

感謝

+0

使用計數功能一樣'計數(lavel)' –

+0

1)你可以簡單地用'爲了通過level'因爲'B'到來之前's'和'g'; 2)你可能想重新考慮使用這個查詢;你會得到多餘的數據。使用'選擇級別,從成員組逐級計數(*)'更清晰。 – Kenney

+0

請編輯您的問題並顯示您的預期輸出。目前尚不清楚你在找什麼。 –

回答

1
select *, (select sum(level = 'bronze') from membership) as bronze_count 
from membership 
order by case when level = 'bronze' then 1 else 2 end, 
     memberdate desc 
+0

這會比使用第一個select *查詢更有效率,然後下一個查詢只是選擇level = bronze並使用rowCount()? –

+0

如何在foreach循環之前回顯$ bronze_count? –

+0

您可以單獨運行查詢。沒有太大的區別 –