CodeIgniter:SQL连接导致重复结果

3

我正在努力扩展我的知识,并构建一个迷你论坛。但是,我在我的代码中遇到了问题。

在论坛首页上,我想显示所有的论坛类别和子类别,就像这样:

类别1

  • 子类别1
  • 子类别2
  • 子类别3

类别2

  • 子类别4
  • 子类别5
  • 子类别6

如您所见,这是一种很普通的“论坛风格”。

但是,当我从数据库中获取结果时,它会返回重复的结果。在这种情况下,是重复的“论坛类别”。因此,它看起来像这样:

类别1

  • 子类别1

类别1

  • 子类别2

类别1

  • 子类别3

...等等

这是获取所有类别等的模型:

categories.php

function GetCategories()
{   
   $this->db->select('*, categories.title as cat_title')->from('categories')->        join('sub_categories', 'sub_categories.categorie_id = categories.id');
    $categories = $this->db->get();
    print_r($categories->result());
    return $categories;
}

我的论坛控制器:

    function index()
{
    $data['categories'] = $this->categories->GetCategories();
    $this->load->view('forum/index', $data);
}

视图

<div class="forum-body">
<?php 
foreach($categories->result() as $cate)
{
    echo '<div class="categorie-head">'.$cate->cat_title.'</div>';
    ?>
        <div class="categories-body">
            <?php echo $cate->title;?>
        </div>
        <?php
}
?>

数据表结构

数据表 "catgories"

  • id - 编号
  • title - 标题

数据表 "sub_categories"

  • id - 编号
  • title - 标题
  • categorie_id - 所属类别编号

那么,最简单的解决方法是什么呢?只用一条查询语句就可以吗?

如果您有任何疑问,请告诉我 :)


你的表结构是什么?不知道表结构很难回答。 - Anubhab
哦,对不起。让我编辑并插入它。 - Dexception
2个回答

1

试试这个:

<div class="forum-body">
<?php 
$cat_title = '';
foreach($categories->result() as $cate)
{
   if($cat_title != $cate->cat_title)
    echo '<div class="categorie-head">'.($cat_title = $cate->cat_title).'</div>';
    ?>
        <div class="categories-body">
            <?php echo $cate->title;?>
        </div>
        <?php
}
?>

“Doesn't seem right”并不能解释它为什么不正确!!!在你的代码中,你在循环的每次迭代中都写出了cat_title。我的更改意味着你只会得到新的cat_title值。如果还是不对,你必须给我们更多的线索,而不仅仅是“它是错误的”!!! - Captain Payalytic
好的,如果你看一下我发给你的链接,你就会知道问题出在哪里了。我有一个重复的“Category 1”。 - Dexception
你需要通过 categories.title, sub_categories.title 对查询进行排序,以获得正确的顺序。 - Captain Payalytic

0

很有可能您的查询结果会显示类似以下内容:

Category 1  | sub-category 1
Category 1  | sub-category 2
Category 1  | sub-category 3
Category 2  | sub-category 4
Category 2  | sub-category 5
Category 2  | sub-category 6
...

只需知道如何在视图中正确显示它。可以有多种方式解决。例如,通过类别分组连接子类别或使用一些 PHP 中的“IF”逻辑:

<div class="forum-body">
<?php
$cat_main = ''; 
foreach($categories->result() as $cate)
{
    $cat_main = ($cat_main == $cate->cat_title) ? '' : $cate->cat_title; 
    if($cat_main != '') '<div class="categorie-head">'.$cate->cat_title.'</div>'; 
?>
        <div class="categories-body">
            <?php echo $cate->title;?>
        </div>
<?php  }  ?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接