2014-12-19 127 views
1

我是codeigniter的新手,我想将下面的MySQL查询转换成Codeigniter Active Record Queries。如何将MySQL查询转换为codeigniter活动记录?

MySQL查询:

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) 

回答

0

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); 
+0

我已经试过 这个$ 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

+0

您是否测试了内部查询,它是否会返回您想要的内容?如果可以的话,你可以尝试将你的查询分成两部分,并在基本查询中使用内部查询的结果来查看是否产生了相同的结果,那么至少我们知道问题不是这个问题。 – mtpultz 2014-12-19 08:52:52

+0

我已经在MySQL Workbench中测试过一个查询,它可以工作。我不明白为什么查询不起作用代码 – user3710364 2014-12-19 08:57:39