Извлечение информации из 2 таблиц

Мне нужна помощь в моем вложенном запросе для моей статьи в статье новостей – в основном я хочу, чтобы в каждой статье отображались связанные с ней комментарии, но на данный момент она возвращает только один комментарий для каждой статьи 🙁

function get_records($limit, $offset, $sort) { $this->db->select('news.*, COUNT(comments.news_id) as comments, comments.comment as comment, news.id as id, news.created_on as created_on, CONCAT(users.firstname, " ", users.surname) as author, categories.category as category, news_types.type as news_type', FALSE); $this->db->from('news', 'comments'); $this->db->join('users', 'users.id = news.author', 'left'); $this->db->join('comments', 'comments.news_id = news.id', 'left'); $this->db->join('categories', 'categories.id = news.category', 'left'); $this->db->join('news_types', 'news_types.id = news.news_type', 'left'); $this->db->group_by('news.id'); $this->db->order_by('news.id', 'DESC'); $this->db->limit($limit, $offset); $query = $this->db->get(); if($query->num_rows() > 0) { return $query->result_array(); } } 

  $this->db->group_by('news.id'); 

GROUP BY вернет вам только одну запись за новостной материал, поэтому вы получите только один комментарий. Вам нужно будет получить второй запрос, чтобы получить все комментарии или удалить GROUP BY, чтобы получить все комментарии с избыточной информацией о новостях (что на самом деле не очень хорошая идея).

Вот что вы хотите сделать – теоретически, а не код:

Вы хотите создать большой массив новостей, причем один элемент в массиве будет другим массивом соответствующих комментариев.

  1. Соберите все ваши новости в одном запросе.
  2. Прокрутите свои новости и, пройдя цикл, запустите другой запрос, который захватывает комментарии, соответствующие новостям.
  3. Дамматируйте комментарии в массив и присоедините массив к элементу result () в качестве свойства объекта или прикрепите к result_array () как новый элемент массива для каждого.

Затем верните весь новый массив / объект в контроллер из вашей модели.

😉