如何使用PHP& amp;按类别对帖子进行分组MySQL的?

时间:2016-01-24 18:48:16

标签: php mysql

我在我的查询中尝试过使用GROUP BY,但每个类别只返回一个帖子。这是我当前设置返回的示例。我需要的是将所有同类别的帖子组合在一起,有人能指出我正确的方向吗?谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

像Charlotte建议的那样,你可以将你的帖子分组到一个关联数组中,将类别作为键。

<?php

// Connecting to database

$categories = array(); // Create an empty array
while ($post = mysqli_fetch_array($result)) {
    if(!array_key_exists($post['category'], $categories)) { // Check if the category is already present
        $categories[$post['category']] = array(); // Create an array indexed with the category name
    }
    $categories[$post['category']][] = $post; // Add the post to the category
}
?>

现在你必须迭代两次:显示类别并显示类别中的每个帖子。 当我必须处理嵌套的foreach来呈现html时,我最好使用inline foreach

帖子的呈现应如下所示:

<?php foreach ($categories as $category => $posts) : ?>
    <h2><?php echo $category; ?></h2>
    <?php foreach ($posts as $post) : ?>
        <a href='article.php?id=<?php echo $post['post_id']; ?>' ><?php echo $post['title']; ?></a>
        <p>Posted on <?php echo date('d-m-y h:i:s',strtotime( $post['posted'] ) );?> In <a href='category5.php?id=<?php echo $post['category_id']; ?>' ><?php echo $post['category']; ?></a>
        </p>
    <?php endforeach; ?>
    <hr/>
<?php endforeach; ?>

编辑:我在第一个代码块中填写了开始和结束的php标签。 如果你在php文件中组装了两个代码块,它应该可以工作。