codeigniter 从表返回结果,该结果在codeignator中的另一个表上不存在

bmp9r5qi  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(193)

我构建了两个表:一个用于列出服务,另一个用于将服务链接到每个部门。
表1包含列[s id,s name].[s_id,s_name]。

  • -服务表,记录所有部门的所有服务。[1,安装Windows 10],[2,打印工资单]。
    表2:服务分配由列[ss_id,ss_s_id_ss_d_id]组成。
  • -services_assignments将服务与部门进行匹配。
    我需要返回与department示例"NOT"匹配的服务。
    我尝试在选择中使用带Where条件的JOIN,但结果不是下面的代码。
function get_services_for_assign(){ // for assigmnets
        $this->db->select('*');
        $this->db->from('services');
        if($this->uri->segment('2')) {
            $this->db->join('services_assignments','services.sr_id = services_assignments.ss_s_id','left');
            $this->db->where_not_in('services_assignments.ss_d_id',$this->uri->segment('2'));
        }
        //$this->db->where('sr_display','1');
        $data=$this->db->get();
        return $data->result();
    }

另一方面,我尝试手动编写它,如下所示。

function get_services_for_assign(){ // for assigmnets

        $dep=$this->uri->segment('2');
        $query = "SELECT sr.sr_id FROM services AS sr WHERE sr.sr_id = (SELECT sa.ss_s_id FROM services_assignments AS sa WHERE sa.ss_d_id = 1)";
        $this->db->query($query);
        $data=$this->db->get();
        return $data->result();
    }

我遇到了以下错误;我发现了许多与我的问题相似的结果,但我无法解决它。
发生数据库错误
错误编号:1096
未使用表格
选择 *
文件名:/xampp/htdocs/townteam/系统/数据库/数据库驱动程序. php
行号:691
我需要你的帮助,以返回的结果服务,没有使用的其他部门。

gc0ot86w

gc0ot86w1#

您没有说明您使用的是哪个版本的CodeIgniter,或者在没有传递部门ID时预期的行为是什么。
这应该在CI3和CI4中都有效。如果使用CI4,你可能应该使用预准备语句。我找不到关于用CI将参数传递到多条件连接中的文档,所以我完整地写出了查询。

$sql = <<<'SQL'
SELECT s.*
FROM services s
LEFT JOIN services_assignments sa
    ON s.sr_id = sa.ss_s_id
    AND sa.ss_d_id = ?
WHERE sa.ss_s_id IS NULL
AND s.sr_display = 1
SQL;

$this->db->query($sql, [$this->uri->segment('2')]);

相关问题