2014-11-02 29 views
1

我需要通過連接三個mysql表創建一個垂直菜單。如何通過連接查詢從三個表中選擇所有匹配的行

這是正常的菜單應該。

Main Cat Items 1 -> Categories 1 --> Sub Cat Items 1 
        Categories 1 --> Sub Cat Items 2 
        Categories 2 --> Sub Cat Items 3 
        Categories 3 --> Sub Cat Items 4 

Main Cat Items 2 -> Categories 4 --> Sub Cat Items 5 

這是三個表我有 表:Main_cat

+-------------+---------------+ 
| main_cat_id | main_cat_name | 
+-------------+---------------+ 
|   1 | main cat 1 | 
|   2 | main cat 2 | 
|   3 | main cat 3 | 
+-------------+---------------+ 

表:類別

+--------+-------------+----------------+ 
| cat_id | main_cat_id | cat_name  | 
+--------+-------------+----------------+ 
|  1 |   1 | cat1 parent 1 | 
|  4 |   1 | cat2 parent 1 | 
|  5 |   1 | cat3 parent 1 | 
|  6 |   2 | cat 4 parent 2 | 
|  7 |   2 | cat 5 parent 2 | 
|  8 |   3 | cat 6 parent 3 | 
+--------+-------------+----------------+ 

表:Sub_cat

+------------+-------------+--------+----------------------+ 
| sub_cat_id | main_cat_id | cat_id | sub_cat_name   | 
+------------+-------------+--------+----------------------+ 
|   1 |   1 |  1 | sub 1 cat1 parent 1 | 
|   2 |   1 |  1 | sub 2 cat1 parent 1 | 
|   3 |   1 |  4 | sub 3 cat 4 parent 1 | 
+------------+-------------+--------+----------------------+ 

每次我嘗試我上午只有一個數組有一些字段,但我期望的是一個malty維數組。這些是我試過的問題。

這是我通過以下查詢獲得的數組之一。

Array 
(
    [0] => stdClass Object 
     (
      [main_cat_name] => main cat 1 
      [main_cat_id] => 1 
      [main_cat_url] => 
      [cat_id] => 1 
      [cat_name] => cat1 parent 1 
      [cat_url] => 
      [sub_cat_id] => 1 
      [sub_cat_name] => sub 1 cat1 parent 1 
      [sub_cat_url] => 
     ) 

    [1] => stdClass Object 
     (
      [main_cat_name] => main cat 2 
      [main_cat_id] => 2 
      [main_cat_url] => 
      [cat_id] => 
      [cat_name] => 
      [cat_url] => 
      [sub_cat_id] => 
      [sub_cat_name] => 
      [sub_cat_url] => 
     ) 

    [2] => stdClass Object 
     (
      [main_cat_name] => main cat 3 
      [main_cat_id] => 3 
      [main_cat_url] => 
      [cat_id] => 
      [cat_name] => 
      [cat_url] => 
      [sub_cat_id] => 
      [sub_cat_name] => 
      [sub_cat_url] => 
     ) 

) 



$query = "SELECT " 
       . "mc.main_cat_name, mc.main_cat_url, cg.cat_name, cg.cat_url,      sc.sub_cat_name, sc.sub_cat_url " 
       . "FROM" 
       . " main_cat AS mc " 
       . "LEFT JOIN " 
       . "categories AS cg " 
       . "ON " 
       . "mc.main_cat_id = cg.main_cat_id " 
       . "LEFT JOIN " 
       . "sub_cat AS sc " 
       . "ON " 
       . "cg.cat_id = sc.sub_cat_id "; 

$query = "SELECT " 
       . "mc.main_cat_name, mc.main_cat_id, mc.main_cat_url, cg.cat_id, cg.cat_name, cg.cat_url, sc.sub_cat_id, sc.sub_cat_name, sc.sub_cat_url " 
       . "FROM" 
       . " main_cat AS mc " 
       . "LEFT JOIN " 
       . "sub_cat AS sc " 
       . "ON " 
       . "sc.main_cat_id = mc.main_cat_id " 
       . "LEFT JOIN " 
       . "categories AS cg " 
       . "ON " 
       . "cg.cat_id = sc.cat_id " 
       . "GROUP BY " 
       . "main_cat_id"; 



$query = "SELECT " 
      . "* " 
      . "FROM " 
      . "main_cat mc " 
      . "LEFT JOIN sub_cat sc " 
      . "ON sc.main_cat_id = mc.main_cat_id " 
      . "LEFT JOIN categories cg " 
      . "ON " 
      . "cg.cat_id = sc.cat_id " 
      . "Group BY " 
      . "sc.cat_id, sc.main_cat_id"; 

但非這些查詢給了我所期待的。你能幫我解決這個問題嗎?

回答

1

是最接近的查詢是:

select mc.main_cat_name, c.cat_name, sc.sub_cat_name 
from main_cat mc left join 
    categories c 
    on c.main_cat_id = mc.main_cat_id left join 
    sub_cat sc 
    on sc.cat_id = c.cat_id 
order by mc.main_cat_id, c.cat_id, sc.sub_cat_id; 

這種意志,但是,給你的「關係」的結果充滿在每個單元更多類似:

Main Cat Items 1 -> Categories 1 --> Sub Cat Items 1 
Main Cat Items 1 -> Categories 1 --> Sub Cat Items 2 
Main Cat Items 1 -> Categories 2 --> Sub Cat Items 3 
Main Cat Items 1 -> Categories 3 --> Sub Cat Items 4 
Main Cat Items 2 -> Categories 4 --> Sub Cat Items 5 

如果你想刪除重複的演示文稿名稱,然後您應該在應用程序中執行此操作。可以在數據庫中進行這種轉換。但是,通常來自SQL查詢的結果集是表格,這意味着排序並不重要。在這種情況下,排序很關鍵,否則你不會知道第二行,第三行和第四行的正確類別。

+0

對不起,延遲迴復。昨天我不在辦公室。現在我可以從db中正確地獲取所有項目。我會盡量使它適合我的菜單。非常感謝你。 – Yasitha 2014-11-04 04:59:57

+0

我試圖刪除重複,但我仍然無法做到。如果你能給我一些幫助,那對我來說會是一種拯救生命。 :) – Yasitha 2014-11-04 09:18:43

相關問題