2011-01-27 236 views
0

我正在嘗試使用PHP和mySQL編寫高度動態的導航生成器。嵌套/子查詢

我旅行得很好,但我已經到了一個我不知道該去哪裏的地步。

我已經有了所有的PHP代碼來創建一個多維數組,然後生成HTML。這工作正常。

我的數據庫的結構方式如下:(我省略了不相關的某些行..回答這個問題時,請記住這一點。)

TBL:導航

id  |name  |parent |handle 
1  | home  | 0  | 1 
2  | about  | 0  | 2 
3  | contact | 0  | 4 
4  | products | 0  | 3 
5  | computers | 4  | 3 

TBL :處理

id  |handle  |redirect_to 
1  | home  | 0 
2  | about  | 0 
3  | contact-us | 0 
4  | products | 0 
5  | products/computers | 0 

我想實現的是導致導航類似這樣每行的東西的print_r()...

Array (
    [id]=>1 
    [name]=>home 
    [parent]=>0 
    [handle]=>Array (
     [id]=>1 
     [handle]=>home 
     [redirect_to]=>0 
) 

是否可以在mySQL級別執行此操作,還是必須使用PHP執行此操作?

+1

爲什麼不使用簡單的連接? – Keeper 2011-01-27 08:51:55

+0

你建議什麼類型的連接? – ajdi 2011-01-27 15:01:42

回答

0

在MySQL中沒有內置的層次結構概念(不是我所知道的),所以我想你必須在php中這樣做。如果在編寫查詢時遇到問題,請考慮使用the nested set model

0

只需在MySQL中使用連接來獲取正確的句柄,從handles中選擇的所有字段都將顯示在數組中,並使用數據庫中指定的正確鍵/值。

SELECT 
`navigation`.*, 
`handles`.`redirect_to`, 
`handles`.`handle` 
FROM `navigation` 
INNER JOIN `handles` ON 
`navigation`.`handle` = `handles`.`id` 

這只是關於從MySQL等關係數據庫中組織和提取數據的冰山一角。知道在哪裏使用哪種查詢類型可以非常強大。如果您將查詢嵌入其他查詢的循環中,則可以一次獲取所有數據。

0

你不能直接在mysql中這樣做,它也需要一些PHP。

SELECT 
    n.id as nav_id, 
    n.name as nav_name, 
    n.parent as nav_parent, 
    n.handle as nav_handle, 
    h.id as handle_id, 
    h.handle as handle_handle, 
    h.redirect_to as handle_redirect_to 
FROM navigation n 
    LEFT JOIN handle h ON n.handle_id = h.id 

$nav = array(); 
foreach($results as $data) { 
    array_filter($data); // removes null values 

    $link = array(
    'id' => $data['nav_name'], 
    'name' => $data['nav_name'], 
    'parent' => $data['nav_parent'] 
); 

    if (isset($data['handle_id'])) { 
    $link['handle'] = array(
     'id' => $data['handle_id'], 
     'handle' => $data['handle_handle'], 
     'redirect_to' => $data['handle_redirect_to'] 
    ); 
    } 
}