Somesh
Somesh

Reputation: 27

nested loop but avoiding the repetition of first loop

I have two tables; One is category and the other one is sub_category.

First I want to display all the items in category and store the value of each category and then display all the sub_categories related to that category but the category should not repeat (it should be displayed only once for all sub-categories).

.this is the output

<?php 
    $abcd = $mysqli->query("SELECT * FROM categories;");
    while($obj = $abcd->fetch_object())
    {
        $category = $obj->name;
        $results = $mysqli->query("SELECT * FROM `sub-category` WHERE category = '$category';");
        while($omg=$results->fetch_object())
        {
            echo $category. ' '.$omg->subcategory.'<br>';
        }
        echo $omg->subcategory;
    }
?>

Upvotes: 1

Views: 108

Answers (2)

JBES
JBES

Reputation: 1557

Use a simple JOIN.

<?php 
    $abcd = $mysqli->query('SELECT DISTINCT categories.name,sub-category.subcategory FROM `categories` JOIN `sub-category` ON category.name = categories.category;');
    while($obj = $abcd->fetch_object())
    {
        echo $obj->name.' '.$obj->subcategory.'<br>';
    }
?>

Upvotes: 0

WEBjuju
WEBjuju

Reputation: 6581

Create an array of subcats and implode them so you only get commas where you want them. Only print the $category outside the loop.

<?php 
    $abcd = $mysqli->query("SELECT * FROM categories ");
    while ($obj = $abcd->fetch_object()) {                   
      $category = $obj->name;
      $results = $mysqli->query("SELECT * FROM `sub-category` WHERE category = '$category' ");     

       echo $category.': ';

       $subcats = array();
       while ($omg = $results->fetch_object()) {
         $subcats[] = $omg->subcategory;
       }

       echo implode(',', $subcats).'<br>';
    }
?>

Upvotes: 1

Related Questions