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