簡體   English   中英

SQL加入Codeigniter嗎?

[英]Sql Join in Codeigniter?

我想將此查詢轉換為codeigniter,但最后一行-'not in'不起作用(我希望分配表中不存在的測試)

SELECT * FROM (`tests` AS A) 
INNER JOIN `test_types` AS B ON `A`.`tst_test_type_id` = `B`.`tt_id` 
INNER JOIN `app_types` AS C ON `A`.`tst_app_type_id` = `C`.`at_id`
 AND tst_id not in (select ast_test_id from assigned_tests)

到目前為止我嘗試了什么

  $this->db->select('*');
    $this->db->from('tests AS A');// I use aliasing make joins easier
    $this->db->join('test_types AS B', 'A.tst_test_type_id = B.tt_id', 'INNER');
    $this->db->join('app_types AS C', 'A.tst_app_type_id = C.at_id', 'INNER');
    $this->db->join('assigned_tests AS D', 'A.tst_id = D.ast_test_id', 'outer');

從您說“將查詢轉換為codeigniter”的問題出發,但那不是真的,您應該說“轉換為活動記錄”,實際上codeigniter可以使用活動記錄類,也可以使用本機查詢,並且它們使用的資源更少比我從文檔引用的活動記錄

注意:如果要編寫自己的查詢,則可以在數據庫配置文件中禁用此類(活動記錄),從而允許核心數據庫庫和適配器使用較少的資源。

為了簡短起見,您可以像這樣使用查詢:

$qry = $this->db->query('SELECT * FROM (`tests` AS A) 
INNER JOIN `test_types` AS B ON `A`.`tst_test_type_id` = `B`.`tt_id` 
INNER JOIN `app_types` AS C ON `A`.`tst_app_type_id` = `C`.`at_id`
AND tst_id not in (select ast_test_id from assigned_tests)');

return $qry->result();

通過將轉義標志設置為false可以將子查詢作為參數提交。

$this->db->select('*');
$this->db->from('tests AS A');
$this->db->join('test_types AS B', 'A.tst_test_type_id = B.tt_id', 'INNER');
$this->db->join('app_types AS C', 'A.tst_app_type_id = C.at_id', 'INNER');
$this->db->join('assigned_tests AS D', 'A.tst_id = D.ast_test_id', 'outer');
$this->db->where('tst_id not in', '(select ast_test_id from assigned_tests)', false);

我發現這與IS NULL一起使用-如果存在一些超常規的事情,請張貼

$this->db->select('*');
        $this->db->from('tests AS A');
        $this->db->join('test_types AS B', 'A.tst_test_type_id = B.tt_id', 'INNER');
        $this->db->join('app_types AS C', 'A.tst_app_type_id = C.at_id', 'INNER');
        $this->db->join('assigned_tests AS D', 'A.tst_id = D.ast_test_id', 'left');
        $this->db->where('D.ast_test_id IS NULL');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM