Codeigntier Active Record Присоединиться - PullRequest
0 голосов
/ 14 января 2012

Активная запись Codeigniter, похоже, не извлекает все мои строки, когда я пытаюсь присоединиться влево.

Настройка БД (упрощенная)

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   |
----------------------------------------    

Когда я получаю список по user_idпротив таблицы «вещей» я получаю ожидаемый результат 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, иличто-то еще.

Решено: переключением GROUP BY с «likes.thing_id» на «things.thing_id»

1 Ответ

0 голосов
/ 16 января 2012

Решается переключением GROUP BY с likes.thing_id на things.thing_id.

Мой результат из 3 элементов был сгруппирован как Thing 2, Thing 3 и NULL, при этом 2 элемента, которых нет в таблице likes, были сгруппированы как.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...