我有一个现有的Web应用程序,我从表“用户”返回用户详细信息,并从表“程序MyMeX结果”中返回用户测试结果。
(用户)

|email|client_id|
|[email protected]|1|
|[email protected]|2|
|[email protected]|1|

(方案成果)
|email|client_id|prog_id|
|[email protected]|1|3|
|[email protected]|1|3|
|[email protected]|1|3|

两个表都有一个“email”列和一个“client_id”列,然后在results表中有一个“prog_id”列。现在,我需要返回特定客户机和程序(prog_id)的“both”表中的所有行,而不管电子邮件列上是否有匹配项,但是如果有匹配项,则应对齐这些值。
我认为这就是通常所说的“完全外部连接”,但在文档中我没有看到CodeIgniter活动记录支持这一点。:(
目前我的活动记录查询大致如下:
$this->db->select('u.email AS user_email, u.client_id AS user_client_id, r.email AS result_email, r.client_id AS result_client_id');
$this->db->from('programmes_results r');
$this->db->join('users u', 'u.email=r.email', 'left outer');
$this->db->where('r.client_id', 1);
$this->db->where('r.prog_id', 3);
$query = $this->db->get();

产生:
SELECT u.email AS user_email, u.client_id AS user_client_id, r.email AS result_email, r.client_id AS result_client_id FROM programmes_results r LEFT OUTER JOIN users u ON u.email=r.email WHERE r.client_id=1 AND r.prog_id=3

但是,这会给我一个结果集,如下所示,其中匹配用户而不注意“他们的”客户机id值:
|user_email|user_client_id|result_email|result_client_id|
|[email protected]|130|[email protected]|1|
|NULL|NULL|[email protected]|1|
|[email protected]|2|NULL|NULL|

此外,更重要的是,它不会从“程序结果”中没有匹配电子邮件地址的“用户”返回值。最后我想说的是:
|user_email|user_client_id|result_email|result_client_id|
|[email protected]|130|[email protected]|1|
|NULL|NULL|[email protected]|1|
|[email protected]|1|NULL|NULL|

:?

最佳答案

我相信你可以通过以下方法得到想要的效果:

$query = $this->db->select('u.email AS user_email, u.client_id AS user_client_id, r.email AS result_email, r.client_id AS result_client_id')
->from('programmes_results r')
->join('users u', 'u.email=r.email', 'left outer')
->where('r.client_id', 1)
->where('r.prog_id', 3)
->where('u.client_id IS NOT NULL')
->get();

生成的SQL等于:
SELECT
    u.email AS user_email,
    u.client_id AS user_client_id,
    r.email AS result_email,
    r.client_id AS result_client_id
FROM
    programmes_results r
LEFT OUTER JOIN
    users u ON
        u.email=r.email
WHERE
    r.client_id = 1 AND
    r.prog_id = 3 AND
    u.client_id IS NOT NULL

关于mysql - 使用Active Record在CodeIgniter中完全外部联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21715947/

10-13 08:52