これはCOUNT()
、によってグループ化された集計で行われuser_name
ます。
ユーザーごとに禁止を取得します。
SELECT
user_name,
COUNT(*) as numbans
FROM bans
GROUP BY user_name
/* ordered by number of bans from greatest to least */
ORDER BY numbans DESC
最も禁止されているユーザーのみを取得します。
SELECT
user_name,
COUNT(*) as numbans
FROM bans
GROUP BY user_name
ORDER BY numbans DESC
/* adjust LIMIT for how many records you want returned -- 1 gives only the first record */
LIMIT 1
あなたの質問では、PHP で手動でカウントしたくないことを非常に懸念しています。これはほとんど必要ないことに注意してください。RDBMS システムは、データの整理とクエリのために明示的に設計されており、このようなタスクを効率的に実行するのに非常に優れています。GROUP BY
MySQL の句と集約関数を読み、それらをマスターします。通常、コードで行う必要はありません。
ボーナス: すべてのユーザーを 3 回以上禁止する
SELECT
user_name,
COUNT(*) as numbans
FROM bans
GROUP BY user_name
/* HAVING clause limits results of an aggregate like COUNT() (which you cannot do in the WHERE clause) */
HAVING numbans >= 3