2012-11-18 68 views
1

哪個是收集相關數據最有效的方法?我應該多次訪問數據庫還是循環訪問數組?

假設我們有多個項目與一個類別1:M相關聯。

每個項目都包含它所屬類別的ID值。我有我的所有項目的數組對象,我現在想要添加到該數組對象的類別名稱而不是它的ID。

因此,例如,而不是:

PROJECT_ID:1個 PROJECT_TITLE:第一個項目 project_desc:BLA BLA project_category_id:1

我希望它是:

PROJECT_ID:1個 PROJECT_TITLE :第一個項目 project_desc:bla bla project_category:第一類

實現這一點並不困難,我很好奇最有效的方法是實現它。

選項1

$projects = $this->projects_model->find_all(); 
$categories = $this->category_model->find_all(); 

foreach($projects as $project){ 
    foreach($categories as $category){ 
     if($project->category_id == $category->id){ 
     $project->category = $category; 
     } 
    } 
} 

選項2

$projects = $this->projects_model->find_all(); 

foreach($projects as $project){ 
    $project->category = $this->category_model->find_by('id', $project->category_id); 
} 

很可能還有很多其他的方法來實現我想要的結果和潛在的更有效的莊園,如果是那樣的話我很想學習。

+0

爲什麼不使用SQL呢?我假設你有某種數據庫,所以你所需要的只是「select * from category where category_id ='$ category' –

+0

抱歉,不應該在我的例子中使用我的預編譯數據庫幫助器方法,那些find_all方法本質上是'select *來自項目' – hoppipolla

回答

1
  1. 你就應該剖析這個自己,你就會有你的答案

  2. 命中數據庫是昂貴的。訪問數組數據不是。這意味着你會希望儘可能少地點擊數據庫。

0

假設你find_all和find_by功能從數據庫請求數據時,選項1將是優選的,直到類別之間的比率尋求並使用類別變低。對SQL進行順序(即讀取 - 然後讀取 - 下一行)讀取操作比有目標的讀取操作快得多。最終,雖然如果我是你的話,我會擔心在實際的數組循環和更多關於如何獲取數據方面,這個是性能消耗的地方。