首页 文章

Codeigniter加入多个条件

提问于
浏览
15

我正在使用Codeigniter Active Records类,我想将 users 表与我的 clients 表连接,这样我就可以显示用户的"real"名称,而不仅仅是他们的ID .

以下是 clients 表的示例(示例),列a_1,a_2和a_3对应于我的 users 表,具体来说, user id

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');

任何帮助都会很棒!

Solution:

这是我能够提出的工作(感谢@elavarasan lee):

<?
 $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');

2 回答

  • 22

    @Dodinas:我得到了MYSQL Query的解决方案 . 我发现很难将查询转换为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

  • 8

    试试这个

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

相关问题