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