2011-07-31 10 views
0

私は2つのテーブル 'events_archive'と 'demo_users'を持っています。イベントテーブルでは、各イベントに一意のref_id値、demo_id値(イベントに参加したデモンストレータのユーザーID)とclient_id値(イベントに参加したクライアントのユーザーID)があります。デモ表では、各デモンストレータには、イベント表のdemo_idに対応する固有のid値があります。CodeIgniterのJOIN文のPHPの問題

私がやりたいことは、特定のクライアントが行ったイベントに参加したデモ・テーブルのすべてのデモレータをリストすることです。私はセッションデータを持つ特定のクライアントのユーザーIDを取得しています。

client_idの値が4であるとします。イベントを共有している(つまりテーブル内で行を共有している)すべてのデモ参加者をリストしたいと思います。私は現在、私のCodeIgniterのモデルでこれを使用しています:

function demos($mid){  
    $this->db->select('demo_users.*'); 
    $this->db->from('demo_users'); 
    $this->db->join('events_archive','events_archive.demo_id = demo_users.id'); 
    $this->db->where('events_archive.client_id',$mid); 
    $this->db->limit(10); 
    $this->db->order_by('users_demonstrators.products_sold','asc'); 
    $demos = $this->db->get(); 
    foreach($demos->result() as $demo){ 
     echo $demo->first_name; 
    } 
} 

しかし、その代わりに、個別のデモをリストアップするのではなく、何度もそれらを複製します。 Demonstrator A、Demonstrator D、Demonstrator Fなどを記載する代わりに、Demonstrator A、Demonstrator A、Demonstrator Aなどを記載します。どこに間違っているのか誰かが知っていますか?

答えて

1

$this->db->select('demo_users.*')の代わりに$this->db->select('*')を試して、echo $demo->first_name;の代わりにvar_dump($demo);を試してください。

私の推測では、Demonstrator Aには多くのレコードがevents_archiveにあります。 2つのテーブルを結合すると、events_archiveの一致する各レコードにdemo_usersの列が追加されます。そのため、複数のdemo_users.*が得られますが、レコードの値は異なるevents_archive.*です。

SELECT DISTINCTをお試しください。

+0

私は '$ this-> db-> distinct();'を追加しました。ありがとう – hohner