2012-01-14 18 views
0

JOIN LEFTを実行しようとすると、Codeigniterのアクティブレコードがすべての行をフェッチしていないようです。Codeigntier Active Record Join

DBのセットアップ私は「物事」テーブルに対してのuser_idリストを取得する場合

Things          Likes 
----------------------------------------  --------------------------- 
| thing_id | thing_name | user_id |  | thing_id | user_id | 
----------------------------------------  --------------------------- 
|  1  | Thing 1 | 5555 |  | 2  | 6666 | 
|  2  | Thing 2 | 5555 |  | 3  | 7777 | 
|  3  | Thing 3 | 5555 |  --------------------------- 
|  4  | Thing 4 | 5555 | 
----------------------------------------  

が、私は4

$sql = $this->db->where('things.user_id', $user_id)->get('things')->result(); 

の予想される結果を取得する(簡体字)しかし、私はこれを行うとき、 、私は3を得る(物2、3 & 4)。

$sql = $this->db->select('things.thing_id as thing_id, COUNT(likes.thing_id) as likes') 
        ->where("things.user_id", $user_id) 
        ->from('things') 
        ->join('likes', 'things.thing_id = likes.thing_id', 'LEFT') 
        ->group_by('likes.thing_id') 
        ->get() 
        ->result(); 

、それは他のテーブル「のような」ではありません1「事」をつかむのではなく、ので、私は混乱しているので、私はそれがある場合に失敗し、JOIN、または何か他のものに混乱しています。

を解決:things.thing_idlikes.thing_idからGROUP BYを切り替えることによって解決

答えて

0

'をthings.thing_id' に 'likes.thing_id' からGROUP BYを切り替えること。 3つのアイテムの

私の結果は、likes表2の項目ではないとしてグループ化されていたThing 2Thing 3NULLとしてグループ化された結果でした。

関連する問題