2011-08-04 26 views
1

我有選擇最登錄的UID的前5名的查詢
我顯示結果那樣:
「名稱」連接457次,失敗了124次計數傳遞登錄和失敗登錄在同一個查詢?

我實際的查詢只能得到「457」次,我不知道如何在同一個查詢中選擇失敗的登錄名。
我有一個名爲「通過」我的數據庫中的字段。如果失敗,則值爲0,如果正確,則值爲1。

目前查詢:

SELECT uid, COUNT(uid) AS cnt 
FROM logins 
GROUP BY uid 
ORDER BY cnt DESC 
LIMIT 5 

數據庫結構:

CREATE TABLE IF NOT EXISTS `logins` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `uid` int(11) NOT NULL, 
    `username` varchar(255) NOT NULL, 
    `ip` varchar(15) NOT NULL, 
    `time` int(10) NOT NULL, 
    `passed` int(1) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1544 ; 

能否請你幫我獲得工作說出來?
在此先感謝

+0

你可以顯示你的表格結構嗎? –

+0

你在哪裏舉行失敗的嘗試(未經檢查的登錄,你稱之爲)? – Shef

+0

對不起,我忘了。我編輯了這個問題。我的數據庫中有一個名爲「已通過」的字段。如果不通過,值爲0,如果通過則爲1。 – Kev

回答

3
SELECT uid, COUNT(uid) AS cnt, COUNT(IF(passed = 0, 1, NULL)) AS failed 
FROM logins 
GROUP BY uid 
ORDER BY cnt DESC 
LIMIT 5 
+0

正是我需要的,不需要重新選擇。很好,謝謝。我不知道「IF」語句存在於MySQL中,非常有用! – Kev

+0

+1。如果OP只希望成功登錄的用戶訂購,那麼你就去了。 – Shef

0
SELECT uid, COUNT(uid) AS cnt, (SELECT COUNT(uid) FROM logins WHERE passed=0) AS failed ... 

您可以使用內部的SELECT語句來實現這一目標。