簡體   English   中英

Codeigniter ActiveRecord:加入反引號

[英]Codeigniter ActiveRecord: join backticking

我有一個簡單的問題:如何使用CodeIgniter的ActiveRecord join函數? 我要這個:

LEFT JOIN cimke ON (mk_terem.id_kicsoda=5 AND mk_terem.id_target=cimke.id_cimke)
LEFT JOIN tanar ON (mk_terem.id_kicsoda=1 AND mk_terem.id_target=tanar.id_tanar)

但是如果我使用$this->db->join(cimke,"mk_terem.id_kicsoda=5 AND mk_terem.id_target=cimke.id_cimke") ,則值5將在反引號之間。

我怎樣才能做到這一點?

UPDATE

我想要的是? 如果mk_terem.id_kicsoda為1,那么我想要tanar.nev ,當mk_terem.id_kicsoda為5時,我想要cimke.nev

完整的SQL查詢:

SELECT
terem.nev terem_nev,
elem_tipus.nev tipus_nev,
(IFNULL(cimke.nev,tanar.nev)) nev
FROM mk_terem
LEFT JOIN terem ON mk_terem.id_terem=terem.id_terem
LEFT JOIN cimke ON (mk_terem.id_kicsoda=5 AND mk_terem.id_target=cimke.id_cimke)
LEFT JOIN tanar ON (mk_terem.id_kicsoda=1 AND mk_terem.id_target=tanar.id_tanar)
LEFT JOIN elem_tipus ON (mk_terem.id_kicsoda=elem_tipus.id_kicsoda)

只有一個簡單的解決方法,丑陋,不優雅,但它適用於這種情況:

$original_reserved = $this->db->_reserved_identifiers;
$this->db->_reserved_identifiers[] = 5;
$this->db->_reserved_identifiers[] = 1;
// or any other values
$this->db->join('with critical values and conditions');
// some db-stuff
$this->db->_reserved_identifiers = $original_reserved;

如果有人知道更好請展示它!

$this->db->join('cimke', 'mk_terem.id_target = cimke.id_cimke');
$this->db->join('tanar', 'mk_terem.id_target = tanar.id_tanar');
$this->db->where('mk_terem.id_kicsoda', 5);
$this->db->where('mk_terem.id_kicsoda', 1);

或使用

$this->db->query('AND_YOUR_RAW_SQL_QUERY_HERE');

我知道我很晚才回答這個問題。 只是我在分享我的知識。 它可能有助於我們了解某些事情。 如果我錯了,請告訴我。 我正在通過您在問題上發布的完整查詢回答此問題。 請在下面查看。

$this->db->from('mk_terem');
$this->db->select('terem.nev terem_nev, elem_tipus.nev tipus_nev, (IFNULL(cimke.nev,tanar.nev)) nev');
$this->db->join('terem','mk_terem.id_terem=terem.id_terem','left');
$this->db->join('cimke','(mk_terem.id_kicsoda=5 AND mk_terem.id_target=cimke.id_cimke)','left');
$this->db->join('tanar','(mk_terem.id_kicsoda=1 AND mk_terem.id_target=tanar.id_tanar)','left');
$this->db->join('elem_tipus','(mk_terem.id_kicsoda=elem_tipus.id_kicsoda)','left'); $this->db->get();

我將您在問題中發布的查詢作為完整查詢。 檢查下面。

SELECT `terem`.`nev` terem_nev, `elem_tipus`.`nev` tipus_nev, (IFNULL(cimke.nev, `tanar`.`nev))` nev FROM (`mk_terem`) LEFT JOIN `terem` ON `mk_terem`.`id_terem`=`terem`.`id_terem` LEFT JOIN `cimke` ON `mk_terem`.`id_kicsoda`=`5` AND mk_terem.id_target=cimke.id_cimke) LEFT JOIN `tanar` ON `mk_terem`.`id_kicsoda`=`1` AND mk_terem.id_target=tanar.id_tanar) LEFT JOIN `elem_tipus` ON `mk_terem`.`id_kicsoda`=`elem_tipus`.`id_kicsoda)`

我相信一切都可以通過codeignitor Active記錄來完成。 無需在$this->db->query()執行查詢作為原始sql。

@uzsolt:我正在解釋這個問題是因為您在“http://stackoverflow.com/questions/8344769/writing-sql-queries-in-codeigniter-2-0”主題下提出的論點。 我會盡快嘗試您在上述網址下發布的其他錯誤,然后再回復您。 如果我有什么不對,請告訴我。 謝謝。 :)

另一個簡單的解決方案是暫時將protect_identifiers設置為關閉:

$this->db->_protect_identifiers = false;

在進行查詢后,您可以將其設置為true

如果您在AND周圍交換條件,它將起作用! CodeIgniter只轉義條件的第一部分。 所以,這應該工作:

$this->db->join('cimke',"mk_terem.id_kicsoda = 5 AND mk_terem.id_target = cimke.id_cimke", "left")

暫無
暫無

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

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