2011-08-04 33 views
1

私はほとんどのログインUIDのトップ5を選択し、クエリを持って
私はそのような結果を示しています。
「名前」は457回を接続し、124回同じクエリでログインに失敗したログイン数とログインに失敗しましたか?

私の実際のクエリのみを取得できませんでした"457"回、同じクエリで失敗したログインを選択する方法がわかりません。
データベースに "passed"という名前のフィールドがあります。失敗した場合は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 ; 

は、あなたがそれを作業得るために私を助けてくださいもらえますか?あなたはこれを達成するために、内側のSELECT文を使用することができ、事前

+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 ... 


感謝。

関連する問題