2017-06-15 6 views
0

私は2つのテーブルuserとmetaから情報を取得しようとしています。しかし、私はすべての代わりに最初の行を取得しています。mysql joinは複数の場合に最初の行を返すだけです

Userテーブルこの

ID | Display Name | Email 
1 | Test   | [email protected] 

メタテーブルのように見えますが、この

meta_id | user_id | meta_key | meta_value 
123  | 1  | address | 123 somewhere 
123  | 1  | city  | Metropolis 

のように見えるこれは

$query = $this->db->from('users as u'); 
$query = $this->db->join('meta as m', 'u.ID = m.user_id'); 
$query = $this->db->where('ID', $data['ID']); 
$query = $this->db->get(); 

return $query->row_array(); 

私のクエリですが、私は、ユーザーテーブルのすべてを取得、だけメタテーブルの最初の行メタテーブルのuser_id = 1と一致するすべての行を取得しようとしています。

これが機能するには、何が欠けていますか?

答えて

1

クエリの結果または最初の行だけをすべて検索しますか?

$query = $this->db->from('users as u'); 
$query = $this->db->join('meta as m', 'u.ID = m.user_id'); 
$query = $this->db->where('ID', $data['ID']); 
$query = $this->db->get(); 

取得ちょうど1つの結果の使用: row_array()返す単一の結果行。クエリに複数の行がある場合は、最初の行のみが返されます。結果は配列として返されます。

return $query->row_array(); 

結果の配列を使用行き方: result_array()方法近づいてきた純粋な配列

return $query->result_array(); 
+0

result_arrayは私が必要としていたものでした。 – JonYork

0

これを試してください。役に立つと願っています

$this->db->select('u.*, m.*'); 
$this->db->from('users as u'); 
$this->db->join('meta as m', 'u.ID = m.user_id'); 
$this->db->where('u.ID', $data['ID']); 
$query = $this->db->get(); 

return $query->row_array(); 
+0

にクエリ結果を返します。今私は2番目のテーブル "meta_key"と "meta_value"から2つの変数を取得しています。どのようにして1行目のアドレスが変数になり、meta_valueがその値になるように保存できますか? – JonYork

+0

"meta_key"と "meta_value"だけを使用したい場合は、$ this-> db-> select( 'm.meta_key、m.meta_value')を使用してください。 –

+0

そして、単一の行だけが必要な場合は$ query-> row ()。あなたは最初の行だけを取得します –

0
$this->db->reset_query();  
$this->db->select("*"); 
$this->db->from('user'); 
$this->db->join('meta', 'user.id = meta.id '); 
$this->db->where('user.id="'. $data['ID'].'"'); // where conditions 
$query = $this->db->get(); 
return $query->result(); 
関連する問題