使用Codeigniter获取登录用户的所有消息以及每封消息的所有答案

时间:2015-08-31 20:14:04

标签: php mysql codeigniter codeigniter-2

我有三张桌子,
    users => id,user_name等等     messages => id,user_id,message_text等等     答案=> id,user_id,message_id,answer_text。

我想获取登录用户的所有消息以及每条消息的所有答案。我尝试了很多连接示例,但我总是得到所有答案(加上他们的消息数据)。

我需要这样的数据

message_1 => all_answers

message_2 => all_answers

message_3 => all_answers

1 个答案:

答案 0 :(得分:2)

仅使用一个查询获得该结果是不可能的,或者太复杂。 您必须分阶段提取数据。使用模型函数将是最好的。 假设您拥有该用户的ID。 你必须得到消息,这很容易。

$this->db->where('user_id', $user_id);
$query = $this->db->get('messages');

现在必须放在模型中。我们称之为messages_model。

class messages_model extends CI_Model {

    function __construct(){
        parent::__construct();
    }

    function get_messages($user_id){
       $this->db->where('user_id', $user_id);
       $query = $this->db->get('messages');
       return $query->result();
    }
}

说,您想将这些消息放入某个变量中,并将它们带到您的视图中。在您的控制器中:

$this->load->model('messages_model');
$rough_messages = $this->messages_model->get_messages($user_id);
foreach($rough_messages as $message){
   $messages[$message->id][$message_text] =  $message->message_text;
   $messages[$message->id]['answers'] = $this->messages_model->get_answers($message->id);
}

然后,你的'get_answers()'模型函数看起来像这样,在messages_model内(编辑:我将它分成两个函数,一个用于db qwery,另一个用于精炼结果):

function get_answers($message_id){
   $rough_answers = $this->get_rough_answers($message_id);
   $answers = array();
   foreach($rough_answers as $answer){
      $answers[$answer->id] = $answer->answer_text;
   }
   return $answers;
}

function get_rough_answers($message_id){
   $this->db->where('message_id', $message_id);
   $query = $this->db->get('answers');       
   return $query->result();
}

现在,如果您在控制器中执行echo '<pre>'.print_r($messages, true).'</pre>';,您将获得一个多维数组,包含您的消息和相应的答案,用于给定的用户ID。您现在可以根据需要更改和使用它。