1

CodeIgniterを使用していて、データベースに2つのテーブルがあります。

最初に大陸と呼ばれ、次のようになります。

    id     | continent_name
    -----------------------
    1      | Africa
    2      | Antarctica
    3      | Asia
    4      | Australia
    5      | Europe
    6      | North America
    7      | South America

2番目に呼び出された状態は次のようになります。

        id | continent_id  | country_name
        -----------------------------------
        1  | 5             | Denmark
        2  | 1             | Angola
        3  | 7             | Peru
        4  | 5             | Germany
        5  | 7             | Venezuela
        6  | 1             | Egypt
        7  | 5             | Spain
        8  | 5             | France
        9  | 7             | Argentina
        10 | 6             | Canada

そして今、私はcontinent_idでグループ化され、ほとんどのレコード(私の場合はヨーロッパ)から最小(アジア)の結果まで次のように順序付けられたリストが必要です。

Europe (4)
South America (3)
Africa (2)
North America (1)
Asia (0)

レコードの数は重要ではありません。内部で別のforeachループを使用します。しかし、私はどういうわけか、1つのクエリでアクティブレコードのカウント、グループ化、および順序付け機能を実現する必要があります。

これまでのところ、これは私のモデルにあります。

function get_top_continents() {

            $q = $this->db->from('states')
                          ->join('continents', 'states.continent_id = continents.id')
                          ->group_by('continent_id')
                          ->get();
            return $q;


    }

ただし、グループ内のアイテム数についても結果を注文する必要があります。

条件ごとにそのような注文を行う方法は?

4

1 に答える 1

2
$q = $this->db->select('continents.id as continent_id,max(continents.continent_name) as   continent_name, COUNT(states.id) as states_count',FALSE)
                      ->from('continents')
                      ->join('states', 'continents.id=states.continent_id','left')
                      ->group_by('continents.id')
                      ->order_by('states_count', 'desc');
                      ->get();
于 2012-08-23T11:05:28.283 に答える