2016-09-29 104 views
0

我的問題

我加入2個表...導航& subnavLEFT JOIN拉動只有一個結果

只有一個結果從subnav表明當它應該是2個或更多的結果。

您可以查看我的問題就在這裏:http://aquiestoy.mx/demo/tempone/indexnew.php (頂部灰色手風琴菜單)

我的代碼

SELECT nav.name AS name, 
nav.href, 
nav.nav_id, 
subnav.name AS subname, 
subnav.nav_id AS parent 

FROM nav LEFT OUTER JOIN subnav 
ON nav.nav_id = subnav.nav_id 

GROUP BY nav.name 
ORDER BY nav.position, subnav.position 

我的表

Table Name "NAV" 
+-------------+-------------+---------+----------+-----------+ 
| nav_id  | name  | href | position | client_id | 
+-------------+-------------+---------+----------+-----------+ 
| 10   | Home  | home | 11  | 56  | 
| 11   | Products | about | 11  | 56  | 
| 12   | Promotions | about | 11  | 56  | 
| 13   | two   | about | 11  | 56  | 
+-------------+-------------+---------+----------+-----------+ 

Table Name SUBNAV 
+-------------+--------+---------+----------+--------+-----------+ 
| subnav_id | name | href | position | nav_id | client_id | 
+-------------+-------------+---------+----------+---+-----------+ 
| 1   |  | page | 1  | 11  | 56  | 
| 2   | Page1 | page | 2  | 11  | 56  | 
| 3   | Page2 | page | 3  | 11  | 56  | 
| 4   | Page3 | page | 4  | 11  | 56  | 
+-------------+--------+---------+----------+--------+-----------+ 

正如你可以看到它是拉動

+0

耶必須有nav_id在固定的,我忘了補充一點,部分SUBNAV表 –

+0

- 但表有NAV_ID –

+0

您可能希望包含一些與菜單HTML相關的php代碼。 – segFault

回答

1

您的GROUP BY nav.name是李在這裏誹謗罪魁禍首。它將對該字段的所有結果進行分組,因此具有相同主導航名稱的所有子/副導航項目將與該行中最後一條記錄的數據合併爲一個結果。

如果可能的話,您可能應該按另一個字段進行分組,或根本不進行分組。

這將要求您重新編寫導航渲染循環來處理新的數據結構,因爲您現在將擁有每個子導航項目。


另一種選擇是將查詢拆分成每個子導航項目的子查詢。

喜歡的東西:

SELECT 
    nav.name, 
    nav.href, 
    nav.nav_id 
FROM nav 
ORDER BY nav.position 

然後遍歷從每個結果,並執行:

SELECT 
    subnav.name, 
    subnav.nav_id AS parent 
FROM subnav 
WHERE subnav.nav_id = 11 // Or the current parent nav_id 
ORDER BY subnav.position 
+0

hey sebastianForsberg請訪問我的個人資料,並幫助我在我的最新question.please –

+0

當我刪除GROUP BY它顯示2主要NAV行...當它應該只顯示1 –