我有两个用于存储用户信息的表。一个用于认证,另一个是用户将自己输入的信息。我正在编写一个模型,当用户与此信息交互时将使用该模型。以下方法是返回数据以进行显示和修改。
我需要一个查询,它将从$ accounts_table返回'email'和'username',并从$ profiles_table返回*。我似乎无法理解JOIN语法。我理解联接是如何工作的,但我的查询会抛出sentax错误。
function get_userdata($id){
$data = array();
$this->db->get_where($this->profiles_table, array('user_id' => $id));
$this->db->join($this->accounts_table.'.email', $this->accounts_table.'.id = '.$this->profiles_table.'.user_id');
$data= $this->db->get();
return $data;
}
答案 0 :(得分:2)
我看到了几个问题:
您应该使用$ this-> db-> where(),而不是$ this-> db-> get_where()。 get_where()立即执行查询。
$this->db->get_where('user_id', $id);
$ this-> db-> join()的第一个参数应该只是表名,不包括字段。
$this->db->join($this->accounts_table, $this->accounts_table.'.id = '.$this->profiles_table.'.user_id');
你正在返回$ data,这只是一个空数组()。您需要将查询结果传递给$ data,如下所示:
$data = $record->result_array();
答案 1 :(得分:1)
get_where
执行查询。因此,您的join
是自己的查询,但不起作用。
您需要将get_where
分为where
和from
。
此外,在MySQL中,您JOIN
表,而不是字段。如果您想要该字段,请将其添加到SELECT
。
$this->db->select($this->profiles_table.'.*');
$this->db->select($this->accounts_table.'.email,'.$this->accounts_table.'.username');
$this->db->from($this->profiles_table);
$this->db->where('user_id', $id);
$this->db->join($this->accounts_table, $this->accounts_table.'.id = '.$this->profiles_table.'.user_id');
$data = $this->db->get();
注意:$this->db->get()
会返回query object,您需要使用result
或row
来获取数据。
答案 2 :(得分:0)
我认为你错了:
$this->db->join($this->accounts_table.'.email', $this->accounts_table.'.id = '.$this->profiles_table.'.user_id');
第一个参数应该是一个表而不是一个字段:$this->accounts_table.'.email'
是错误的恕我直言。或者只是一个错字:)