3

私は自分の知識を広げようとしており、ミニフォーラムを構築しています。ただし、コードに問題があります。

フォーラムのインデックス ページで、次のようにすべてのフォーラム カテゴリとサブカテゴリを表示したいと思います。

カテゴリー1

  • サブカテゴリ 1
  • サブカテゴリ 2
  • サブカテゴリー3

カテゴリー2

  • サブカテゴリ 4
  • サブカテゴリ 5
  • サブカテゴリ 6

ご覧のとおり、通常の「フォーラム スタイル」です。

しかし、データベースから結果を取得すると、重複した結果が返されます。この場合、「フォーラムのカテゴリ」を複製します。したがって、次のようになります。

カテゴリー1

  • サブカテゴリ 1

カテゴリー1

  • サブカテゴリ 2

カテゴリー1

  • サブカテゴリ 3

... 等々

すべてのカテゴリなどを取得するモデルは次のとおりです。

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
}
?>

テーブル構造

テーブル「カテゴリ」

  • ID
  • 題名

テーブル「sub_categories」

  • ID
  • 題名
  • カテゴリ_id

それで、それを修正するための最も簡単な方法は何ですか?1つのクエリだけで可能ですか?

わからないことがあれば教えてください:)

4

2 に答える 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
}
?>
于 2013-03-09T16:52:40.943 に答える
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  }  ?>
于 2013-03-09T16:56:17.590 に答える