2012-01-19 14 views
2

私は、ユーザーに関する情報を格納するために2つのテーブルを持っています。 1つは認証用であり、もう1つはユーザーが入力する情報です。私はユーザーがこの情報とやり取りするときに使用されるモデルを書いています。次の方法は、表示と変更のためのデータを返すことです。このCode IgnitorのmySQLクエリで何が問題になっていますか?

$ accounts_tableと* from $ profiles_tableから 'email'と 'username'を返すクエリが必要です。私は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

エラーメッセージを投稿できますか? – davidethell

+0

私は最終的に何をそれが必要やってクエリを得ているが、私はストレートのmySQLに頼らなければならなかった: '関数のget($ ID) { $記録=の$ this - > DB->クエリ( ' SELECT' $ this-> accounts_table。 '、'。$ this-> accounts_table。 '、$ this-> accounts_table。'、$ this-> accounts_table。 '、$ this-> accounts_table。 => '$ this-> profiles_table'。user_id = '。$ id)'を入力してください。 ; $ record-> row_array();を返します。 } ' これはCI記法でどのように連鎖されますか...勝利のために? – Evan

答えて

2

私は問題のカップルを参照してください。

あなたが代わります$ this-の、> DB->ここで、()の$ 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 = $record->result_array(); 
+0

このフィードバックをいただきありがとうございます! – Evan

1

get_whereは、クエリを実行します。したがって、joinは独自のクエリですが、これはうまくいきません。

get_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(); 

注:query objectを返し$this->db->get()、あなたはデータを取得するためにresultrowを使用する必要があります。

+0

このフィードバックをありがとう! – Evan

+0

@エヴァン:No prob。 –

0

私はあなたがミスをしたと思う:

$this->db->join($this->accounts_table.'.email', $this->accounts_table.'.id = '.$this->profiles_table.'.user_id'); 

最初のパラメータはテーブルではないフィールドべき:$this->accounts_table.'.email'は間違っ私見です。または単にタイプミス: