2013-04-13 9 views
12

Codeigniter Active Recordsクラスを使用していて、自分のIDではなく、ユーザーの「実際の」名前を表示できるように、clientsテーブルにusersテーブルを追加したいと考えています。ここでCodeigniter複数の条件で結合する

A_2、A_1 clients表は(例)のように見えるものであると列、およびA_3は具体的には、user id、私のusersテーブルに対応しています。

clients 
|--------|---------|----------|-----------|----------| 
| id | name | a_1 | a_2 | a_3 | 
|--------|---------|----------|-----------|----------| 
| 1 | Paul | 2  |  4  | 1  | 

そして、私のusersテーブルは次のようになります。

users 
|--------|---------|----------| 
| id | first | last | 
|--------|---------|----------| 
| 1 | Paul | Blake | 
|--------|---------|----------| 
| 2 | Dan | Doe | 
|--------|---------|----------| 
| 3 | Steve | Smith | 
|--------|---------|----------| 
| 4 | Harry | Jones | 
|--------|---------|----------| 

私はclients表から選択して、それを登録しようのであれば、基本的に、それは次のようになります。

clients 
|--------|---------|----------|-----------|----------| 
| id | name | a_1 | a_2 | a_3 | 
|--------|---------|----------|-----------|----------| 
| 1 | Paul | Dane Doe |Harry Jones|Paul Blake| 

はこれまでのところ、私が試してみました(働いてなかった、それだけですべてに同じ名前が表示されます):

<? 
$this->db 
    ->select('name, a_1, a_2, a_3') 
    ->from('clients') 
    ->join('users', 'users.id=a_1 OR users.id=a_2 OR users.id=a_3'); 

すべてのヘルプは素晴らしいことです!

ソリューション:ここ

が、私はどの作品(おかげで風下@elavarasanする)を思い付くことができたものです。

<? 
$this->db 
    ->select('CONCAT(u1.first," ", u1.last) as a_1_name, CONCAT(u2.first," ", u2.last) as a_2_name, CONCAT(u3.first," ",u3.last) as a_3_name', FALSE) 
    ->from('clients') 
    ->join('users AS u1', 'u1.id=a_1', 'left') 
    ->join('users AS u2', 'u2.id=a_2', 'left') 
    ->join('users AS u3', 'u3.id=a_3', 'left'); 

答えて

8

@Dodinas:私はMYSQLクエリのintermsソリューションを得ました。私はそれをCI Active Recordに変換するのが難しいと思っています。しかし、この方法を試してください。

 

    $sql = "SELECT `name`, CONCAT(`u1`.`first`,' ', `u1`.`last`) as a_1, 
          CONCAT(`u2`.`first`,' ', `u2`.`last`) as a_2, 
          CONCAT(`u3`.`first`,' ', `u3`.`last`) as a_3 
      FROM `clients` 
      LEFT JOIN `users` as `u1` ON (`u1`.`id`=`a_1`) 
      LEFT JOIN `users` as `u2` ON (`u2`.`id`=`a_2`) 
      LEFT JOIN `users` as `u3` ON (`u3`.`id`=`a_3`)"; 

    $result = $this->db->query($sql); 


screenshot of the query result taken from PHP Myadmin

+0

を試してみてください。クエリをアクティブなレコードに変換しないという別の理由があります。P –

+0

ありがとうございました!これは助けになりました。私はActiveレコードを使って作業するようにしました。上記の私の編集を参照してください。 – Dodinas

17

は時間がほとんど3 AMであるnは、私はすでに死んで眠い感じてここに私の国でこの

$this->db 
    ->select('*') 
    ->from('clients') 
    ->join('users', 'users.id = clients.a_1 OR users.id=clients.a_2 OR users.id = clients.a_3'); 

$query = $this->db->get(); 

return $query->result(); 
関連する問題