Mysql codeigniter中的活动记录会自动在每个where子句逗号分隔值周围添加引号

Mysql codeigniter中的活动记录会自动在每个where子句逗号分隔值周围添加引号,mysql,codeigniter,select,activerecord,Mysql,Codeigniter,Select,Activerecord,我将在WHERE in查询子句中使用逗号分隔的值作为 $sql = ' MAX(CASE WHEN rt.machine_name = "new" THEN rt.request_status_count ELSE "0" END) AS "new", MAX(CASE WHEN rt.machine_name = "open" THEN rt.request_status_count ELSE "0" END) AS "open",

我将在WHERE in查询子句中使用逗号分隔的值作为

$sql = '
            MAX(CASE WHEN rt.machine_name = "new" THEN rt.request_status_count ELSE "0" END) AS "new",
            MAX(CASE WHEN rt.machine_name = "open" THEN rt.request_status_count ELSE "0" END) AS "open",
            MAX(CASE WHEN rt.machine_name = "waiting" THEN rt.request_status_count ELSE "0" END) AS "waiting",
            MAX(CASE WHEN rt.machine_name = "closed" THEN rt.request_status_count ELSE "0" END) AS "closed"
            FROM 
            (SELECT COUNT(r.id) AS request_status_count, rs.name AS status, rs.machine_name AS machine_name
            FROM '. $this->_table . ' r INNER JOIN request_status AS rs ON r.request_status_id = rs.id INNER JOIN organizations AS o ON r.organization_id = o.id '. $where_string .' GROUP BY r.request_status_id) AS rt';

        $this->db->select($sql);  
$where_字符串作为

$security_clause_string = 'WHERE r.location_id IN ("' . $this->session->userdata('str_user_locations').'")';
其中str_user_locations=1,2,4

此查询的输出为

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '` GROUP BY r.request_status_id) AS rt' at line 4

SELECT MAX(CASE WHEN rt.machine_name = "new" THEN rt.request_status_count ELSE "0" END) AS "new", MAX(CASE WHEN rt.machine_name = "open" THEN rt.request_status_count ELSE "0" END) AS "open", MAX(CASE WHEN rt.machine_name = "waiting" THEN rt.request_status_count ELSE "0" END) AS "waiting", MAX(CASE WHEN rt.machine_name = "closed" THEN rt.request_status_count ELSE "0" END) AS "closed" FROM (SELECT COUNT(r.id) AS request_status_count, `rs`.`name` AS status, `rs`.`machine_name` AS machine_name FROM requests r INNER JOIN request_status AS rs ON r.request_status_id = rs.id INNER JOIN organizations AS o ON r.organization_id = o.id WHERE r.location_id IN ("1, `2`, `3")` GROUP BY r.request_status_id) AS rt

尝试使用
where_in
Read

你在哪里产生这样的结果

 $names = array('Frank', 'Todd', 'James');
    $this->db->where_in('username', $names);
 // Produces: WHERE username IN ('Frank', 'Todd', 'James')

Codeignitor活动记录添加了这些引号,我将我的查询替换为

$sql = 'SELECT
            MAX(CASE WHEN rt.machine_name = "new" THEN rt.request_status_count ELSE "0" END) AS "new",
            MAX(CASE WHEN rt.machine_name = "open" THEN rt.request_status_count ELSE "0" END) AS "open",
            MAX(CASE WHEN rt.machine_name = "waiting" THEN rt.request_status_count ELSE "0" END) AS "waiting",
            MAX(CASE WHEN rt.machine_name = "closed" THEN rt.request_status_count ELSE "0" END) AS "closed"
            FROM 
            (SELECT COUNT(r.id) AS request_status_count, rs.name AS status, rs.machine_name AS machine_name
            FROM '. $this->_table . ' r INNER JOIN request_status AS rs ON r.request_status_id = rs.id INNER JOIN organizations AS o ON r.organization_id = o.id '. $where_string .' GROUP BY r.request_status_id) AS rt';

        $query = $this->db->query($sql);  
        return $query->result_array();

如果
location\u id
为int,您可以按照
WHERE r.location\u id IN('.$this->session->userdata('str\u user\u locations')。
location\u id将是多个id,因此我以1,3,5,6的形式传递,这就是我的意思,如果数据库中的数据类型为int,您不需要引号。
$sql = 'SELECT
            MAX(CASE WHEN rt.machine_name = "new" THEN rt.request_status_count ELSE "0" END) AS "new",
            MAX(CASE WHEN rt.machine_name = "open" THEN rt.request_status_count ELSE "0" END) AS "open",
            MAX(CASE WHEN rt.machine_name = "waiting" THEN rt.request_status_count ELSE "0" END) AS "waiting",
            MAX(CASE WHEN rt.machine_name = "closed" THEN rt.request_status_count ELSE "0" END) AS "closed"
            FROM 
            (SELECT COUNT(r.id) AS request_status_count, rs.name AS status, rs.machine_name AS machine_name
            FROM '. $this->_table . ' r INNER JOIN request_status AS rs ON r.request_status_id = rs.id INNER JOIN organizations AS o ON r.organization_id = o.id '. $where_string .' GROUP BY r.request_status_id) AS rt';

        $query = $this->db->query($sql);  
        return $query->result_array();