Запрос возвращает только одну строку данных - PullRequest
0 голосов
/ 16 августа 2011

Создаю веб-приложение в codeigniter, оно извлекает сообщения из базы данных для пользователя на основе ключевых слов, которые они добавили в свой список ключевых слов.Я пытаюсь получить все сообщения с ключевыми словами пользователей, но возвращает только одно сообщение, в то время как для ключевых слов в сообщениях есть совпадения с кратностью

Это функции из моей модели

Этофункция извлекает ключевые слова пользователей

function user_keywords($user_id) {
         //Get all the user keywords
         $q = $this->db->select('keywords')
                        ->from('keywords')
                        ->where('U_id',$user_id)
                        ->get();
        $words = $q->result_array();
        return $words;
     }

Эта функция извлекает сообщения

function get_latest_pheeds() {
        $this->load->helper('date');
         $time = time();
         $keyword = $this->user_keywords($this->ion_auth->user_id);
         foreach($keyword as $word) {
         $q = $this->db->select('user_id,pheed_id,datetime,pheed,COUNT(pheed_comments.comment_id) as comments')
         ->from('pheeds')
         ->join('pheed_comments','pheed_comments.P_id=pheeds.pheed_id','left')
         ->like('pheed',$word['keywords'])
         ->order_by('datetime','desc')
         ->get();
         }
         $rows = $q->result_array();
         return $rows;
     }

И мой контроллер кодирует его в JSON

function latest_pheeds() {
            if($this->isLogged() == true) {
            $this->load->model('pheed_model');
            $data = $this->pheed_model->get_latest_pheeds();
            echo json_encode($data);
            }
            return false;
    }

Я очень ценю помощь

1 Ответ

1 голос
/ 16 августа 2011

Я думаю (но это сложно без тестирования), что проблема возникает из функции get_last_feeds:

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

Я бы сделал что-то вроде этого:

<?php
function get_latest_pheeds() {
     $rows = array(); // The final result, an array of rows
    $this->load->helper('date');
     $time = time();
     $keyword = $this->user_keywords($this->ion_auth->user_id);
     foreach($keyword as $word) {
     $q = $this->db->select('user_id,pheed_id,datetime,pheed,COUNT(pheed_comments.comment_id) as comments')
     ->from('pheeds')
     ->join('pheed_comments','pheed_comments.P_id=pheeds.pheed_id','left')
     ->like('pheed',$word['keywords'])
     ->order_by('datetime','desc')
     ->get();
     $rows[] = $q->result_array();
     }

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