Codeigniter Active Record объединяет и возвращает только один результат - PullRequest
1 голос
/ 31 июля 2011

Я создаю простой скрипт форума, используя Codeigniter и активную запись.

Я хочу использовать эту функцию, чтобы получить все потоки и их соответствующие значения ответов для передачи обратно моему контроллеру.

Используя приведенный ниже скрипт, я получаю только первый поток (и его количество ответов), возвращенный в массиве, в отличие от всех моих потоков.

Почему это так и как это можно исправить?

function get_threads($id){

    $this->load->database();

    $this->db->select('title,ID,COUNT(replies.threadID) as replies');
    $this->db->from('threads');
    $this->db->join('replies', 'threads.ID = replies.threadID');

    $query=$this->db->where('forum', $id);
    $query=$this->db->get();

    $data=$query->result_array();

    return $data;
}

1 Ответ

0 голосов
/ 01 августа 2011

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

$this->load->database();

$this->db->select('title,ID,COUNT(replies.threadID) as replies');
$this->db->from('threads');
$this->db->join('replies', 'threads.ID = replies.threadID','left');
$this->db->group_by('threads.title, threads.ID');
$this->db->where('forum', $id);

$query = $this->db->get();

COUNT вернет 0, если ответы не найдены

Краткое пояснение:

Вы хотите знать количество ответов для каждого потока, затем вам нужно сообщить MYSQL, когда счет остановится, и сбросьте счетчик. Или, лучше сказать, MYSQL, как группировать ваши данные, функция агрегации (здесь COUNT) будет применяться к каждой группе. Google 'group by mysql' для получения дополнительной информации

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