【发布时间】:2014-03-10 01:42:18
【问题描述】:
我有一个现有的 Web 应用程序,我从表“用户”返回用户详细信息,并从表“程序结果”返回用户测试结果。
(用户)
|email|client_id|
|A@example.com|1|
|B@example.com|2|
|C@example.com|1|
(program_results)
|email|client_id|prog_id|
|A@example.com|1|3|
|B@example.com|1|3|
|D@example.com|1|3|
两个表在两个表中都有一个“email”列和一个“client_id”列,然后在结果表中有一个“prog_id”列。我现在需要返回特定客户端和程序 (prog_id) 的“两个”表中的所有行,无论电子邮件列上是否存在匹配项,但是如果“存在”匹配项,则值应该对齐。
我认为这就是通常所说的“完全外部连接”,但我在文档中没有看到任何关于 CodeIgniter Active Record 支持的内容。 :(
目前我的活动记录查询大致如下:
$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
但是,这给了我一个结果集,如下所示,它匹配用户而不注意“他们的”client_id 值:
|user_email|user_client_id|result_email|result_client_id|
|A@example.com|130|A@example.com|1|
|NULL|NULL|D@example.com|1|
|B@example.com|2|NULL|NULL|
此外,更重要的是,它不会从“用户”返回值,因为“programmes_results”中没有匹配的电子邮件地址。我想结束的是:
|user_email|user_client_id|result_email|result_client_id|
|A@example.com|130|A@example.com|1|
|NULL|NULL|D@example.com|1|
|C@example.com|1|NULL|NULL|
:?
【问题讨论】:
-
你搞定了吗?如果没有,我可能会为你试一试。
标签: mysql sql codeigniter