Вытащить информацию из 2 таблиц - PullRequest
1 голос
/ 14 июля 2011

Мне нужна помощь с вложенным запросом для моей страницы новостной статьи - в основном, я хочу, чтобы каждая статья отображала соответствующие комментарии внизу, но в данный момент она возвращает только один комментарий для каждой статьи: (

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();
   }
}  

Ответы [ 2 ]

3 голосов
/ 14 июля 2011
 $this->db->group_by('news.id');

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

2 голосов
/ 14 июля 2011

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

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

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

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

;)

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