Code Igniter Получить Количество комментариев из другой таблицы Для списка сообщений Массив для ответа API - PullRequest
0 голосов
/ 18 марта 2020

Здравствуйте,

Я работаю над API ответа для моделей сообщений и комментариев в Code Igniter!

МОЙ контроллер:

    public function getPosts()
  {
    if (isset($_POST["getPosts"]))
    {
      $data = $this->api_model->getPosts();
      $json_response2 = array('status' => 'success', 'postList' => $data->result_array());
      echo json_encode($json_response2);
    }
    else
    {
      $data['status'] = 'error';
      echo json_encode($data);
    }
  }

Моя модель:

public function get_posts()
    {
            $this->db->order_by('postID', 'DESC');
            $query = $this->db->get('posts');
            return $query->result_array();
    }

MYSQL Таблицы:

for Posts---
postID | postTitle | postBody

for Comments---
commentID | postID | commentBody

Я хочу получить количество комментариев для массива постов в ответе API на отображение списка постов и комментариев Счет для этого поста?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Это запрос, необходимый для получения всех этих данных в одном запросе. Он объединит обе таблицы с предложением left join и также подсчитает количество комментариев.

SELECT 
  p.`postID`,
  `postTitle`,
  `postBody`,
  COUNT(c.commentID) AS comment_cnt
FROM
  `Posts` AS p 
  LEFT JOIN `Comments` AS c 
    ON p.postID = c.postID 
GROUP BY c.postID 
ORDER BY p.postID DESC ;

N: B левое объединение является обязательным, иначе оно не даст вам нулевого комментария.

, чтобы преобразовать его в codeigniter, вы можете записать его как.

$this->db->from('Posts p');
$this->db->join('Comments c','p.postID = c.postID','left');
$this->db->group_by('c.postID');
$this->db->order_by('p.postID', 'DESC');
$this->db->select('p.*,COUNT(c.commentID) AS comment_cnt');
$query = $this->db->get();

$res = $query->result_array();

Надеюсь, это поможет вам.

0 голосов
/ 18 марта 2020

Вам необходимо присоединиться к таблице comments , чтобы получить количество и группу по вашему postID. Измените вашу get_posts() функцию в модели следующим образом:

$this->db->from('posts');
$this->db->select("posts.*, count(*) as comments_count");
$this->db->join('comments', 'posts.postID = comments.postID');
$this->db->group_by('posts.postID');
$this->db->order_by('postID', 'DESC');
return $this->db->get()->result_array();

Также вы дважды используете result_array (), что неправильно. Измените строку контроллера

      $json_response2 = array('status' => 'success', 'postList' => $data->result_array());

на

      $json_response2 = array('status' => 'success', 'postList' => $data);

, потому что вы уже получаете результат от модели.

Кроме того, используйте правильное имя для функции в контроллере, $this->api_model->get_posts();

Надеюсь, это поможет.

...