我加入了两张桌子......导航和放大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
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 :(得分: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