CI有真正好的文档为他们的整个API我强烈建议给他们一个快速阅读。特别是关于你的问题,你应该看看Active Record文档here和CodeIgniter query library,它会给你提示使用API生成更安全的查询。这两个链接共同包含您在CodeIgniter中构建查询所需的所有API调用。
在最简单的层次,你可以这样做:
$query = $this->db->query('select sevadar_id, sevadar_name from tbl_sevadarmaster where sevadar_designation = 6 and sevadar_id not in (SELECT p_id FROM `tbl_events` WHERE program_id = 27 and event_date = 2014-07-06 and p_id is not null)');
但是你要使用查询绑定(见query libraries页面的最下方),以生产出更安全的查询自动逃跑的数据,这里是一个例子使用查询绑定从API的那一页:
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
如果你使用活动记录库,你可以尝试:
$this->db->select('p_id');
$this->db->from('tbl_events');
$this->db->where('program_id', 27);
$this->db->where('event_date', '2014-07-06');
$this->db->where('p_id is not', null);
$where_clause = $this->db->get_compiled_select();
$this->db->select('sevadar_id, sevadar_name');
$this->db->from('tbl_sevadarmaster');
$this->db->where('sevadar_designation', 6);
$this->db->where("`sevadar_id` NOT IN ($where_clause)", NULL, FALSE);
我已经试过 这个$ query = $ this-> db-> query('select sevadar_id,sevadar_name from tbl_sevadarmaster where sevadar_designation = 6 and sevadar_id not in(SELECT p_id FROM'tbl_events' WHERE program_id = 27 and event_date = 2014- 07-06和p_id不为空)'); 但查询选择表中的所有行,不知道如何? – user3710364 2014-12-19 08:46:36
您是否测试了内部查询,它是否会返回您想要的内容?如果可以的话,你可以尝试将你的查询分成两部分,并在基本查询中使用内部查询的结果来查看是否产生了相同的结果,那么至少我们知道问题不是这个问题。 – mtpultz 2014-12-19 08:52:52
我已经在MySQL Workbench中测试过一个查询,它可以工作。我不明白为什么查询不起作用代码 – user3710364 2014-12-19 08:57:39