1

whileループでテーブルを表示しようとしています..しかし、2日間そこに行き詰まっています。誰でも私がこれを行うのを助けることができますか?

ここで、実際に何をしようとしているのかを説明します.. 私のデータベースには、いくつかのカテゴリといくつかの主題があります。各カテゴリには独自の主題があります。ここで、カテゴリとその主題をリストとして表示する必要があります。特定のカテゴリのサブジェクトを表示する場合、サブジェクトを表示するために 2 つの列を持つ HTML テーブルを追加する必要があります。

これは私がこれまでに行ったコードです..

    $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>';
   }

ここで、カテゴリ名はタグの下に正しく表示されます。しかし問題は、カテゴリに属する​​サブジェクトを表示しようとするときです。.container Div に件名テーブルを表示しようとしています。

この問題について助けてくれる人はいますか...?

ありがとうございました...

4

1 に答える 1

1

試す

...
//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 -->";
}
...

アップデート

DB からデータを取得するために使用したアプローチを変更することを考えました。このコードを試してください (コードはテストされておらず、メモ帳を使用して入力したものです) ので、少し修正する必要があるかもしれません...)

$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>';          

}

これでは、最初にカテゴリを取得し、最初のカテゴリ名を出力するループに入り、ループ内で現在のカテゴリの適切なサブジェクトを取得してから、次のものを出力します...

于 2013-01-13T15:18:04.007 に答える