2012-05-05 38 views
0

我試圖顯示存儲在我的數據庫類別:展示類

http://dl.dropbox.com/u/16459516/Screen%20shot%202012-05-05%20at%2015.59.40.png

我的想法是我的模型中走出數據庫的所有數據和中重構陣列我功能:

function get_all_categories() { 

    $query = $this->db->query('SELECT * FROM categories'); 

    //code to reconstruct my array like: 
    //foreach($query->result_array() as $row) { 
     //$categories[$row['niveau_1']] = array[] 
    //} 

    return $categories; 
} 

和輸出一些陣列等:

[0] => Array 
     (
     [niveau_1] => main category name 
     [niveau_2] => Array(
         ...children here and children of these childs 
         ) 
     ) 

有誰知道如何做到這一點?我堅持在這裏,不知道如何創建數組...我知道如何顯示它在我的意見,但讓他們在陣列似乎很難。

在此先感謝!

+0

第一個喲,我們不應該使用無準備的SQL語句..使用活動記錄查詢。 #2你需要運行兩個查詢,並使用foreach循環來查看並匹配它們。 – gorelative

回答

0
// your model using activerecord 
public function getCategories(){ 
    $q = $this->db->get('categories'); 
    if($q->num_rows > 0){ 
    return $q->result(); 
    }else{ 
    return false; 
    } 
} 

//your controller 
$this->load->model('category_model'); 
$data['results'] = $this->category_model->getCategories(); 
foreach($data['results'] as $c){ 
    //iterate through categories, match them to points. 
    //match category_id in results with category_id in the other table results 
    //setup a multi dimensional array to build up what you need. 
} 
2

這是一個想法:

  1. 的foreach類別(除了4水平)檢查是否存在到結果陣列($c
  2. 如果它不使用則創建一個數組標註類別的名稱
  3. 一次controlle類別2和3,您可以將所生成的數組中的最後一個

$ query = $ this-> db-> query('SELECT * FROM categories');

$raw_categories = $query->result_array(); 

$c = array(); 

foreach($raw_categories AS $row) 
{ 
    if(!array_key_exists($row['niveau_2'],$c) && !empty($row['niveau_2'])) 
    { 
     $c[$row['niveau_2']] = array(); 
    } 

    if(!array_key_exists($row['niveau_3'],$c[$row['niveau_2']]) && 
     !empty($row['niveau_3'])) 
    { 
     $c[$row['niveau_2']]['niveau_3'] = array(); 
    } 

    $c[$row['niveau_2']]['niveau_3'][] = $row['niveau_4']; 
} 

這不是測試,但你可以使用它作爲一個想法

1

我覺得你的數據庫是錯誤的。據我所知,這是一個「內容表」或類似(類別,子類別,子類別等)。 「1. Visie,Beleid ......」出現了很多次。

如果我會做我更改數據庫:

table niveau_1 
    id_1 - primary key 
    title - string 
table niveau_2 
    id_2 - primary key 
    id_1 - connect to niveau_1 (which niveau_1 is its 'parent') 
    title - string 
table niveau_3 
    id_3 - primary key 
    id_2 - connect to niveau_2 (which niveau_2 is its parent) 
    title - string 

在這種情況下,你的數據庫將不重複的元素,我想你所需的查詢將是simplier:

SELECT 
    niveau_1.title AS title_1, 
    GROUP_CONCAT(niveau_2.title,"@") AS title_2, 
    GROUP_CONCAT(niveau_3.title,"@") AS title_3 
FROM niveau_1 
LEFT JOIN niveau_2 ON niveau_2.id_1=niveau_1.id_1 
LEFT JOIN niveau_3 ON niveau_3.id_2=niveau_2.id_2 
GROUP BY niveau_2.id_2 

這個查詢只是一個半解決方案,它並不適合你,但你可以從這裏開始。