【问题标题】:Print Posts from all categories and their categories names打印所有类别的帖子及其类别名称
【发布时间】:2014-02-07 12:38:51
【问题描述】:

我尝试实现以下目标:

  • 一些很棒的帖子标题(发表在体育)
  • 帖子的另一个标题这里(张贴在空间)
  • 一些帖子的标题很酷(发布在技术中)
  • 等等……

我显示所有类别的所有帖子,并将类别名称放在每个帖子旁边。 我不明白在哪里以及为什么会失败。所有帖子都乘以类别数。 这是我到目前为止所拥有的:

posts table:

post_id
post_title
post_content
category_id



categories table:

category_id
category_name
category_description

还有我的查询和 PHP 代码:

// I select all categories with their id and name
$stmt = $db->prepare("SELECT * FROM categories");
$stmt->execute();
$row_categories = $stmt->fetchAll(PDO::FETCH_ASSOC);

// I select all posts too
$stmt = $db->prepare("SELECT * FROM posts");
$stmt->execute();
$row_posts_all = $stmt->fetchAll(PDO::FETCH_ASSOC);

然后:

foreach ($row_posts_all as $array_index_number => $name_of_index) {

    foreach ($row_categories as $array_index_number_categories => $name_of_index_category) {

        print $name_of_index['post_title'] . " posted in: " . $name_of_index_category['category_name'] . "<br><br>";
    }
}

我认为这两个 foreaches 部分做错了。我可以做一个 foreach 来显示所有帖子,但我不知道如何获取它们的类别名称并将它们放在下一个。

【问题讨论】:

  • 您的帖子表中是否有类别的参考?那列名称是什么?
  • 是的!对不起!我忘记了一个字段。我更新了我的问题。我在posts 表中有“category_id”

标签: php


【解决方案1】:

这就是我们有JOINS的原因,

SELECT * from posts p
LEFT JOIN categories c on c.id = p.category_id

然后你可以只需要一个循环,

foreach ($row_posts_all as $array_index_number => $name_of_index) {
    echo $name_of_index['post_title'] . " posted in: " . $name_of_index['category_name'] . "<br><br>";
}

【讨论】:

  • 谢谢!我现在将阅读并练习它,因为我不明白“p”和“c”是什么。
  • 它们只是表格的别名。
  • 谢谢!我现在会尝试练习。当帖子可能有类别和子类别时,您能否建议我一些参考或想法如何升级示例。当我在谷歌搜索类别、帖子等时,所有结果都与 WordPress 相关。 :-/
  • 在这种情况下请参考这个问题stackoverflow.com/questions/8542201/…
【解决方案2】:
select P.*, C.* from posts P
inner join categories C on C.category_id = P.category_id

您不需要 2 个 sql 请求。所以你不需要2个循环

【讨论】:

  • 我可以在没有加入的情况下实现这个想法,因为我还没有实践过。我现在是否必须练习连接才能完成我尝试的操作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2011-09-26
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多