我正在开发一个菜单系统,它接受一个网址,然后查询数据库以构建菜单 我的菜单表是:
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| node_id | int(11) | YES | | NULL | |
| parent | int(11) | YES | | NULL | |
| weight | int(11) | YES | | NULL | |
| title | varchar(250) | YES | | NULL | |
| alias | varchar(250) | YES | | NULL | |
| exclude | int(11) | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+
我的问题的相关列是别名,parent和node_id
所以对于一个网址:http://example.com/folder1/folder2/filename
别名可能=“filename”,“folder1”,“folder2”
Parent =父文件夹的node_id。
我所知道的是如何将网址拆分为数组并检查别名以查找每个部分的匹配项。 我不知道的是如何让它过滤由别名匹配“folder2”并且其父别名与“folder1”匹配的父级。 我想像这样的查询:
select * from menu
where alias='filename' and
where parent = node_id
where alias='folder2' and parent = node_id
where alias='folder1'
除了我知道以上是错误的。我希望这可以在一个查询中完成。
提前感谢您的帮助!
答案 0 :(得分:1)
select * from menu
where alias='filename' and
parent = (select node_id from menu
where alias='folder2' and
parent = (select node_id from menu
where alias='folder1'
)
)
答案 1 :(得分:0)
我无法获得您想要的查询,但这里有两条规则:
答案 2 :(得分:0)
这应该为你做。它通过父节点链接所有节点(如果有的话),并将检索一条记录中所有级别的信息。
select *
from menu m1
left outer join menu m2 on m1.parent = m2.node_id
left outer join menu m3 on m2.parent = m3.node_id
where m1.alias = 'filename'
and m2.alias = 'folder2'
and m3.alias = 'folder1'