0

私はあなたがラグビー チームのコーチになるオンライン ゲームを所有しており、最近データベースの最適化を開始しました。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 を返します。各リーグで非アクティブなチームの数をどのように数え、この数の後にそれらをどのように並べ替えるのですか?

4

1 に答える 1

2

これを試して:

select league_id
from standings s
join teams t on t.id = s.team_id and t.active
group by 1
having count(*) < 5
于 2013-08-23T22:06:57.740 に答える