我有这样的数据库结构
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个。)
或者有更聪明(更有效)的方法吗?也许是一个查询?
答案 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