【发布时间】:2014-09-30 20:41:35
【问题描述】:
我有两个 SQL 表:
- 类别:id、title、level、parent
- 文章:id、title、category_id
现在我想得到这个结果:
Category 1
Article 1
Artcile 2
Article 3
Category 2
Subcategory 1
Article 1
Artcile 2
Article 3
Subcategory 2
Article 1
Artcile 2
Article 3
Category 3
Article 1
Artcile 2
Article 3
我会这样做:
$categories = $db->prepare('SELECT * FROM categories WHERE level = 0');
$categories->execute();
while($category = $categories->fetch(PDO::FETCH_OBJ)) {
$sub_categories = $db->prepare('SELECT * FROM categories WHERE parent = :parent_id');
$sub_categories->bindParam(':parent_id', $category->id, PDO::PARAM_INT);
$sub_categories->execute();
while($sub_category = $sub_categories->fetch(PDO::FETCH_OBJ)) {
$articles = $db->prepare('SELECT * FROM articles WHERE category_id = :category_id');
$articles->bindParam(':category_id', $sub_category->id, PDO::PARAM_INT);
$articles->execute();
while($article = $articles->fetch(PDO::FETCH_OBJ)) {
echo $article->title.'<br />';
}
}
}
首先,这很糟糕,因为它只是从子类别(而不是类别)中获取文章,并且只有一个深度的选择。
第二:我使用了三个查询,它们被多次执行,只是为了那个基本的东西。性能... :-(
我想只用一个 SQL 查询来解决这个问题。这可能吗? (然后我会创建输出......)
SQLfiddle: http://sqlfiddle.com/#!2/2a4f2
【问题讨论】:
-
你想要什么输出?
-
@JayBlanchard 我渴望名利!
-
只需要上面显示的结果。这意味着类别的标题和文章的标题......
-
你想输出名利@Charles? ¯_(ツ)_/¯
-
我们需要查看您的表架构。你能设置一个 SQL 小提琴吗? sqlfiddle.com