1 回答

TA貢獻1788條經(jīng)驗 獲得超4個贊
會有一些人會建議您進行單獨的查詢并合并結(jié)果集,因為這會減少腳本卷積。
會有其他人贊成使用 UNION ALL 來組合兩個表查詢,因為他們更喜歡單次訪問數(shù)據(jù)庫或者你不需要在第一次 SELECT 之后為列添加別名(對于列名的情況不同)。
我會滿足您的要求,但要明白滿足您的要求的方法不止一種。
CodeIgniter 目前不提供 UNION 方法,因此您可以對活動記錄做的最好(AFAIK)是編譯兩個 SELECT 查詢并在調(diào)用內(nèi)部執(zhí)行 UNION query()。
實際呈現(xiàn)的查詢和結(jié)果集可能會略有不同,具體取決于您的數(shù)據(jù)庫適配器——這種多功能性是 CodeIgniter 查詢構(gòu)建方法的一個特性。
我包括一個額外的列 ( source),以便您可以在顯示數(shù)據(jù)時做出明智的決定(關(guān)于超鏈接等)。否則,您可能會引用一個id值但不知道它id引用的是哪個表。
代碼:
$this->db->select($this->db->escape('v_grants') . ' AS source, id, title, type');
$this->db->from('v_grants');
$this->db->like('title', $keyword);
$this->db->or_like('open_to', $keyword);
$vGrantsQuery = $this->db->get_compiled_select();
$this->db->select($this->db->escape('art') . ', id, title, type');
$this->db->from('art');
$this->db->like('title', $keyword);
$this->db->or_like('open_to', $keyword);
$artQuery = $this->db->get_compiled_select();
/*
var_export([
$this->db->query($vGrantsQuery . ' UNION ALL ' . $artQuery)->result(),
$this->db->last_query()
]);
*/
return $this->db->query($vGrantsQuery . ' UNION ALL ' . $artQuery)->result();
ps Model 方法result()將生成一個空數(shù)組或一個對象數(shù)組。在您看來,您不需要count();只需檢查if (!$result) {——這將告訴您結(jié)果集是否為空。
- 1 回答
- 0 關(guān)注
- 86 瀏覽
添加回答
舉報