MySQL查询从给定父级的子类别中获取标题

时间:2014-01-05 14:48:45

标签: mysql join

我有这样的数据库结构

CATEGORIES
ID | parent_id | name
1  | 0         | sports
2  | 1         | football
3  | 1         | tennis
4  | 0         | activities
5  | 4         | hiking
etc.


NEWS
ID | category_id | title              | date       | etc
1  | 2           | Football is great  | 2012-12-21 | 
2  | 3           | Tennis is healthy  | 2012-11-13 |
3  | 5           | Go on hiking       | 2013-11-15 | 

现在,当我想获得“体育”子类别的标题(标题)时,实现这一目标的最佳方法是什么?

我正在考虑做多个查询(在这种情况下为3)。

首先,让所有孩子参加“体育”

SELECT * FROM categories WHERE parent_id = 1

然后,对于每个结果,执行查询以获取每个子类别的标题。

SELECT * FROM news WHERE category_id = (result from query above)

在此示例中,将执行3个查询。 (一个用于获取所有子类别。在这种情况下有两个子类别,因此将对新闻表执行两个查询。这总共为3个。)

或者有更聪明(更有效)的方法吗?也许是一个查询?

1 个答案:

答案 0 :(得分:1)

您应该可以使用INNER JOIN

进行一次查询
SELECT NEWS.*, CATEGORIES.name 
FROM NEWS 
INNER JOIN CATEGORIES ON NEWS.category_id = CATEGORIES.ID

您也可以使用LEFT JOIN编写查询。这将允许您列出所有类别,包括那些没有新闻文章的类别。

SELECT categories.name as Category_Name, news.*
FROM categories  
LEFT JOIN news ON news.category_id = categories.ID

我把它放在SQL小提琴中以帮助演示:http://sqlfiddle.com/#!2/9c1b3/6