Codeigniter 加入多个条件

Posted

技术标签:

【中文标题】Codeigniter 加入多个条件【英文标题】:Codeigniter Join with Multiple Conditions 【发布时间】:2013-04-06 05:06:51 【问题描述】:

我正在使用 Codeigniter Active Records 类,我想将我的 users 表与我的 clients 表连接起来,这样我就可以显示用户的“真实”姓名,而不仅仅是他们的 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');

任何帮助都会很棒!

解决方案:

这是我想出的有效方法(感谢@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');

【问题讨论】:

【参考方案1】:

@Dodinas:我得到了关于 mysql 查询的解决方案。我发现很难将查询转换为 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 来自“客户” 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);

【讨论】:

在我的国家,时间快到凌晨 3 点了,我已经感到非常困倦。不将查询转换为活动记录的另一个蹩脚原因......:P 谢谢!这有帮助。我使用活动记录让它工作,请参阅上面的编辑。【参考方案2】:

试试这个

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

【讨论】:

以上是关于Codeigniter 加入多个条件的主要内容,如果未能解决你的问题,请参考以下文章

如何根据codeigniter中的时间戳获取数据?

Codeigniter 加入多个 id 并显示到视图

Codeigniter - 具有多个 Where 条件的批量更新

多个where条件codeigniter

使用 CodeIgniter 的 ActiveRecord 对多个条件逻辑进行分组

在codeigniter中一起更新和加入查询?