Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 具有多个条件的Codeigniter连接_Mysql_Codeigniter_Join - Fatal编程技术网

Mysql 具有多个条件的Codeigniter连接

Mysql 具有多个条件的Codeigniter连接,mysql,codeigniter,join,Mysql,Codeigniter,Join,我正在使用Codeigniter Active Records类,我想将我的用户表与我的客户表连接起来,这样我就可以显示用户的“真实”姓名,而不仅仅是他们的ID 以下是客户机表的外观(示例),列a_1、a_2和a_3对应于我的用户表,具体地说是用户id: clients |--------|---------|----------|-----------|----------| | id | name | a_1 | a_2 | a_3 | |-

我正在使用Codeigniter Active Records类,我想将我的
用户
表与我的
客户
表连接起来,这样我就可以显示用户的“真实”姓名,而不仅仅是他们的ID

以下是
客户机
表的外观(示例),列a_1、a_2和a_3对应于我的
用户
表,具体地说是
用户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|
到目前为止,我已经尝试过了(没有成功,它只是为所有人显示了相同的名称):


@Dodinas:我从MYSQL查询中得到了解决方案。我发现很难将查询转换为CI活动记录。但是试试这个:

$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); $sql=“选择`name`、CONCAT(`u1`.`first`、'''.`u1`.`last`)作为一个_1, CONCAT('u2`.'first`,''u2`.'last`)作为, CONCAT('u3`.'first`,''u3`.'last`)作为 来自“客户” 在(`u1`.`id`=`a_1`)上将`users`作为`u1`左键联接 在(`u2`.`id`=`a_2`)上将`users`作为`u2`左键连接 在(`u3`.`id`=`a_3`)上将`users`作为`u3`左键连接; $result=$this->db->query($sql);

试试这个

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

在我的国家,时间几乎是凌晨3点,我已经感到非常困倦。Dats未将查询转换为活动记录的另一个蹩脚原因…:谢谢你!这有帮助。我使用活动记录使其工作,请参见上面的编辑。 $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);
$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();