TNK
TNK

Reputation: 4333

Display a table in a foreach loop with database values

I am trying to display a table in a while loop.. But I have got stuck there for 2 days. anyone can help me to do this?

Now I will explain actually what I am trying to do here.. There are several categories and several subjects in my database. each category have its own subjects. Now I need to display category and its subjects as a list. When display subjects under particular category I need to add a HTML table with 2 columns to display subjects..

This is the code that I have done so far..

    $categoryIds = implode(',', $_SESSION['category']);

    $q = "SELECT  c. category_id AS ci, c.category_name AS cn, s.subject_name AS sn, s.subject_id AS si
            FROM    category AS c 
            INNER JOIN category_subjects AS cs ON cs.category_id = c.category_id
            INNER JOIN subjects AS s ON s.subject_id = cs.subject_id
          WHERE   c.category_id IN ($categoryIds)";

    $r = mysqli_query( $dbc, $q) ;

    $catID = false;
    $max_columns = 2;

    while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC))
    {
        $categoryId = $row['ci'];
        $category = $row['cn'];
        $subjects = $row['sn'];

        echo '<div>';

        //Detect change in category
        if($catID != $categoryId) 
        {

            echo "<h3>Category 01: <span>{$category}</span><span></span></h3>\n";

            foreach ( $subjects AS $sub ) {

                echo "<div class='container'>\n";
                //echo "<table><tr>\n"; 

                //echo $sub;

                echo "</div> <!-- End .container DIV -->\n";

            }           
            echo '</div>';          
        }               
        $catID = $categoryId;       
        echo '</div>';
   }

Here, Category Name display correctly under tag. But problem is when going to display subjects which are belongs to categories. I am trying to display subjects table in .container Div.

please Is anybody there can I get help whit this issue...?

Thank you...

Upvotes: 1

Views: 3495

Answers (1)

Nalaka526
Nalaka526

Reputation: 11474

Try

...
//Detect change in category
if($catID != $categoryId) 
{
    echo "<h3>Category 01: <span>{$category}</span><span></span></h3>";
    echo "<div class='container'>";
    echo "<table>"; 

    if (is_array($subjects))
    {
        foreach ($subjects as $sub) {
            echo "<tr>";
            echo "<td>";
            echo $sub;
            echo "</td>";
            echo "</tr>";
        }
    }
    else
    {
        echo "<tr><td>No subjects to display...<td/><tr/>";
    }
    echo "</table>"; 
    echo "</div> <!-- End .container DIV -->";
}
...

Update

Thought of changing the approach you've used to retrieve the data from DB. Try this code (code is not tested, typed it using notepad) so you may need to fix it a bit...)

$categoryIds = implode(',', $_SESSION['category']);

$q = "SELECT  c. category_id AS ci, c.category_name AS cn
      FROM    category AS c 
      WHERE   c.category_id IN ($categoryIds)";

$r = mysqli_query( $dbc, $q) ;

$catID = false;
$max_columns = 2;

while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC))
{
    $categoryId = $row['ci'];
    $category = $row['cn'];

    echo '<div>';

    echo "<h3>Category 01: <span>{$category}</span><span></span></h3>\n";

    $qs = "SELECT  s.subject_name AS sn, s.subject_id AS si
              FROM    category_subjects cs
              INNER JOIN subjects AS s ON s.subject_id = cs.subject_id
              WHERE cs.category_id = \'' . $categoryId . '\'";

     $rs = mysqli_query( $dbc, $qs) ;

     echo "<h3>Category 01: <span>{$category}</span><span></span></h3>";
     echo "<div class='container'>";
     echo "<table>"; 

     while ($rows = mysqli_fetch_array($rs, MYSQLI_ASSOC))
     {
         $sub = $rows['sn'];

         echo "<tr>";
         echo "<td>";
         echo $sub;
         echo "</td>";
         echo "</tr>";
     }

     echo "</table>"; 
     echo "</div> <!-- End .container DIV -->";

     echo '</div>';          

}

In this we fetch Categories first, go in a loop print first Category name and within the loop we fetch appropriate Subjects for the current category, then print the next one and so on...

Upvotes: 1

Related Questions