私はあなたがラグビー チームのコーチになるオンライン ゲームを所有しており、最近データベースの最適化を開始しました。Web サイトは CodeIgniter フレームワークを使用しています。
私は次のテーブルを持っています (テーブルにはより多くのフィールドがありますが、今重要なものだけを投稿しました):
LEAGUES: id
STANDINGS: league_id, team_id, points
TEAMS: id, active
以前は、LEAGUES テーブルに team という名前のフィールドがありました。これは、そのリーグでアクティブなチームの数 (ユーザーが最近ログインしたチーム) を表していました。そのため、次の選択を行って、アクティブなチームが 0 から 4 の間のランダムなリーグを取得していました (最初にチームが少ないリーグ)。
SELECT id FROM LEAGUES WHERE teams>0 AND teams<4 ORDER BY teams ASC, RAND( ) LIMIT 1
チームフィールドを追加せずに同じコマンドを実行できる方法はありますか? 効率的ですか?または、チーム フィールドをデータベースに保持した方がよいでしょうか。
後で編集
これは私が今までやったことです:
function test()
{
$this->db->select('league_id, team_id');
$this->db->join('teams', 'teams.id = standings.team_id');
$this->db->where('active', 0);
$query = $this->db->get('standings');
return $query->result_array();
}
この関数は、すべての非アクティブなチームとその League_id を返します。各リーグで非アクティブなチームの数をどのように数え、この数の後にそれらをどのように並べ替えるのですか?