LEFT JOIN只拉一个结果

时间:2016-09-29 03:11:48

标签: mysql join left-join

我的问题

我加入了两张桌子......导航和放大subnav

当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

MY TABLES

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     |
+-------------+--------+---------+----------+--------+-----------+

正如你所看到它正在拉动

1 个答案:

答案 0 :(得分: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
相关问题