我有三张桌子,
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
答案 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。您现在可以根据需要更改和使用它。