【发布时间】:2015-07-31 05:16:36
【问题描述】:
我将在 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_string 被传递为
$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
【问题讨论】:
-
如果
location_id是 int 你可以像WHERE r.location_id IN (' . $this->session->userdata('str_user_locations').')'那样做 -
location_id 将是多个 ID,所以我传递为 1,3,5,6
-
是的,这就是我的意思,如果数据库中的数据类型是 int 你不需要引号。
标签: mysql codeigniter select activerecord