有可能產生由CI查詢生成器類下面的查詢?笨JOIN(SELECT查詢
SELECT name
FROM table1 t1
JOIN
(SELECT ID FROM table2 ORDER BY id LIMIT 5) t2
ON t2.id=t1.t2_id
WHERE t1.id>5
有可能產生由CI查詢生成器類下面的查詢?笨JOIN(SELECT查詢
SELECT name
FROM table1 t1
JOIN
(SELECT ID FROM table2 ORDER BY id LIMIT 5) t2
ON t2.id=t1.t2_id
WHERE t1.id>5
那麼有幾個做的方式,一種方式是在這裏是一個黑客攻擊。
How can I rewrite this SQL into CodeIgniter's Active Records?
這另一種方法是非常簡單的。
$this->db
->select('ID')
->from('table2')
->order_by('id')
->limit('5');
$subquery = $this->db->_compile_select();
$this->db->_reset_select();
$query = $this->db
->select('t1.name')
->from('table1 t1 ')
->join("($subquery) t2","t2.id = t1.t2_id")
->get('table1 t1');
有些觀點。
您必須在子查詢中使用from子句,因爲get會運行查詢。
在codeigniter 2中_compile_select和_reset_select不能被訪問,因爲它們是受保護的方法。
您可能必須在system/database/DB_active_rec.php中的兩種方法之前刪除關鍵字
This文章也很有用。
這個庫可以幫助您使用子查詢與查詢生成器對這個庫的文檔看
如果它爲'group_start實施將是有益的()' –
也可以此功能通過CI查詢生成器類添加到這個庫,並在GitHub上的開發者共享將成爲其他開發商太有用 – umefarooq
將盡時,我得到了一個時間,知道CI超過現在 –
在CI3,只需使用第四個參數逃生
$this->db->from('table')
->join('SELECT id from table2 where something=%s) as T2'),'table.id=T2.id', 'LEFT',NULL)
->get()->row();
不要忘記在子查詢中轉義參數以避免SQL注入。
** ** –
我問** CI查詢生成器**不生查詢,我可以運行原始查詢O'C, –
好吧,我已經加你還沒有看到他們告訴究竟是如何做到這兩篇文章的鏈接。一個是我自己的答案。小心一看? –
以及爲什麼你把這個更糟的答案呢?第二個鏈接看起來不錯,可能是這樣做的最好方法 –