我正在查询数据库,以便从我的数据库中获取所有雇主的名字,但我只想获得他们的工作表中存在他们ID的那些,这就是我想要做的。
$this->db->select('*')
->from('employers')
->join('jobwall', 'jobwall.employers_employer_id = employers.employer_id', 'left');
然而,这不会返回正确的结果,如何从雇主表中选择所有雇主,但前提是他们在作业墙表中有数据?
答案 0 :(得分:0)
您需要添加WHERE子句:
$sql = '
SELECT *
FROM employers
LEFT JOIN jobwall ON jobwall.employers_employer_id = employers.employer_id
WHERE employers.employer_id
IN (SELECT employers_employer_id FROM jobwall)
';
$this->db->query($sql);
我不确定使用Codeigniter的activerecord类创建会有多复杂。
答案 1 :(得分:0)
我认为更好的WHERE子句可能是:
SELECT *
FROM employers
LEFT JOIN jobwall ON jobwall.employers_employer_id = employers.employer_id
WHERE jobwall.id IS NOT NULL
这将排除任何没有相应作业的行。
如果jobwall
不存在,您应该使用jobwall.id
表所包含的主键。
这也可以使用ActiveRecord轻松编写。
答案 2 :(得分:0)
我完全不了解你,但我认为你应该在没有join
的情况下使用left
:
this->db->select('*')->from('employers')->join('jobwall', 'jobwall.employers_employer_id = employers.employer_id');