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

MySQL查询以从给定父级的子类别中获取标题,mysql,join,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

我有一个这样的数据库结构

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 news WHERE category_id = (result from query above)
在本例中,将执行3个查询。(一个用于获取所有子类别。本例中有两个子类别,因此将对新闻表执行两个查询。这总共是3个。)


还是有更聪明(更有效)的方法?可能是一个查询?

您应该能够使用
内部联接通过一个查询来完成此操作

SELECT NEWS.*, CATEGORIES.name 
FROM NEWS 
INNER JOIN CATEGORIES ON NEWS.category_id = CATEGORIES.ID
您还可以使用
左连接编写查询。这将允许您列出所有类别,包括没有新闻文章的类别

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

我将其放在SQL FIDLE中以帮助演示:

您可以轻松地连接这两个表。类别与新闻之间的关系如何,是1:1还是1:n?没有新闻的类别有效吗?请注意,按照惯例,我们对孤立项使用NULL而不是0。
SELECT categories.name as Category_Name, news.*
FROM categories  
LEFT JOIN news ON news.category_id = categories.ID