查询里面的Mysql查询

时间:2016-05-29 14:20:40

标签: php mysql

首先,如果标题与问题不符,请道歉。好吧,问题是如何构建这个查询...

我有一张名为category的表格。它包含我的东西(电影)类别。就像这样...

--------------------------------
ID | name   | parent_category
--------------------------------
1  | love   | 0
2  | action | 0
3  | fear   | 0
4  | passion| 1
5  | danger | 2
6  | death  | 3
--------------------------------

因此,如您所见,每个类别都有一个父类别。除了前三个。他们是父母。

电影表就是这样......

--------------------------------
ID | name   | category
--------------------------------
1  | aaaa   | 1
2  | bbbbbb | 2
3  | cccc   | 2
4  | ddddddd| 1
5  | eeeeee | 3
6  | fffff  | 3
--------------------------------

所以,我想做的是,按父类别选择电影。这意味着如果我点击类别love,它应该选择所有以love作为父类别的类别的电影。

那么,如何在单个查询中编写它?

3 个答案:

答案 0 :(得分:1)

如果父母只有一个级别,那么您可以使用join s:

select m.*,
       coalesce(cp.id, c.id) as parent_id,
       coalesce(cp.name, c.name) as parent_name
from movies m left join
     categories c
     on m.category = c.id left join
     categories cp
     on c.parent_category = cp.id;

实际上,如果您只想要id,则不需要两个联接:

select m.*,
       (case when c.parent_id > 0 then c.parent_id else c.id end) as parent_id
from movies m left join
     categories c
     on m.category = c.id ;

或者更简单:

select m.*, greatest(c.parent_id, c.id) as parent_id
. . .

答案 1 :(得分:1)

选择在secend表上按条件过滤的行使用FROM子句中的join或具有IN或EXISTS函数的条件子查询。要将字段与某个字符串进行比较,可以使用LIKE运算符。

答案 2 :(得分:1)

如果您基于parent_category进行过滤 -

SELECT b.*, a.name FROM movies b 
    LEFT JOIN categories a ON a.id = b.category
WHERE a.parent_category = 1;