MySQL:结合多个where条件

时间:2010-06-06 20:13:17

标签: mysql

我正在开发一个菜单系统,它接受一个网址,然后查询数据库以构建菜单 我的菜单表是:

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

除了我知道以上是错误的。我希望这可以在一个查询中完成。

提前感谢您的帮助!

3 个答案:

答案 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)

我无法获得您想要的查询,但这里有两条规则:

  • WHERE语句应该只有一个。
  • 结果表达式将逐个应用于每一行。你可能认为不是“整体”表。所以,在创建表达式时你必须要认真思考。与alias ='folder2' alias ='folder1'同时不匹配

答案 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'