2015-05-01 53 views
-1

我有一種情況,我需要從7個不同的表中獲取數據,以執行特定的處理。如何使用CodeIgniter中的單個查詢從多個表中獲取結果?

我將需要7個簡單的SELECT所有語句,沒有什麼奇特的。但爲了最小化數據庫命中,我非常希望將這些查詢綁定到1或2個查詢中。

像:

select * from table1; select * from table2; select * from table3;. 

並呼籲從我的代碼此查詢。在.net的DataSet的類似的行中可以得到結果。我正在尋找核心PHP或CodeIgniter的解決方案。我正在使用PDO進行數據庫連接。

PS:表格有不同的模式,沒有共同點。因此,加入或聯合的任何解決方案都不起作用。

$results = $this->db-query("select * from tb1; select * from tb2"); 

現在$result[0]應該有所有的記錄從TB1和$results[1]應該從TB2有記錄。

在這種情況下,類似行上的東西將最有幫助。

+0

你沒有提供的表結構也沒有實際的代碼。請更新您的問題。這是CodeIgnitEr而不是CodeIgnitor。 – kidA

+0

我不需要爲您提供任何代碼,因爲它不是我編碼並被卡住的東西。這只是一個在.NET中很容易處理的情況,但我無法在php中找到解決方案。 –

+0

使用聯合查詢獲取所有表數據 – Saty

回答

0

調查InnerJoin。這就是你如何進行多重選擇一次 - 假設你有一個共同的數據點

+0

沒有共同點。我只是想要連接2個或更多select語句並試圖將結果轉換爲一個數組數組。 –

+0

那麼詳細定義所有字段呢? SELECT aa,ab,za,zb FROM c AS a,y AS z - AS是一個額外的,你可能甚至不需要...這應該工作,但我從來沒有嘗試過它超過2個表... –

0

你需要的是UNION

$this->db->query('SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2'); 

UNION ALL這是UNION關鍵字,以及可選的ALL關鍵字。 UNION表示UNION之前的SELECT語句的結果將與UNION後面的SELECT語句的結果組合在一起。

當您使用ALL關鍵字時,不會從聯合產生的組合集中刪除重複的行。這可以顯着提高查詢的性能,因爲Access不必檢查重複行的結果。

  • 你確信選擇查詢不會產生任何 重複行:如果任何下列條件爲真,應該使用ALL關鍵字。

  • 如果結果有重複的行,這並不重要。

  • 你想查看重複的行。

EDITED

您的版本和我所得到它從你的問題那麼這可能會有幫助後。你需要循環,查詢得到的results數組作爲

$tablename = array('name1','name2','name3','name4','name5','name6','name7'); 
$results = array(); 
foreach($tablename as $key => $value){ 
    $results[$key] = $this->db->query("select * from ".$value."")->result_array(); 
} 
+0

問題是所有表格都有不同的模式,所以在這種情況下不能使用聯合。我會更新我的問題來強調這個事實。 –

+0

然後對您的問題進行更新,以便更好地理解您的問題。 –

+0

@vishwajeetkumar查看我的更新回答 –

0

多重選擇查詢在codigniter

$this->db->select('t1.*, t2.*'); 
$this->db->from('table1 AS t1, table2 AS t2'); 
$query = $this->db->get(); 
$row = $query->result_array(); 
print_r($row); 
+0

這不會導致他們的笛卡兒積?即如果每個表格中有三行,則會返回九行? – halfer

+0

這會撞擊數據庫一次還是兩次?來自不同表格的記錄是否可用於不同的結果集?我對此表示懷疑。 –

+0

這將打擊一次數據庫,並讓您獲得所有表格結果 – Saty

相關問題