2

このコードを持っていますが、クエリの順序がわかりません

function get_All_Categories(){
//new instance of mysqli
    $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
    //if it doesn't work give an error
    if (!$mysqli) {
        die('There was a problem connecting to the database.');
    }
    $queryCats ="SELECT Catid, Catname
                 FROM ProductCats
                 ORDER BY Catid";
    $querySubCats ="SELECT Subcatname, Parentid
                    FROM ProductSubCats, ProductCats
                    WHERE ProductSubCats.Parentid = ProductCats.Catid
                    ORDER BY Subcatname;";
    if ($catResults = $mysqli->query($queryCats)){
        if (!$catResults) {
            echo 'Could not run query: ' . mysql_error();
            exit;
        }
        else{
            $subCatResults = $mysqli->query($querySubCats);
        }
        while ($rows = $catResults->fetch_assoc()) {
            echo '<div class = "categoryCluster">';
            echo '<a href="../index.php?Cat='.$rows["Catname"].'">'.$rows["Catname"].'</a>';
            echo '<br>';
            while($rowsSub = $subCatResults->fetch_assoc()){
                echo '<div class="subCategoryCluster">';
                echo '&emsp;'.'<a href="../index.php?Cat='.$rows["Catname"].'&'.'Subcat='.$rowsSub["Subcatname"].'">'.$rowsSub["Subcatname"].'</a>';
                echo '<br>';
                echo '</div>';
            }
            echo '</div>';
        }
    }
    $mysqli->close();
}

この出力を表示します:

Header 1
 Subcat 1
 Subcat 2
 OtherSubcat 1
Header 2
Header 3
Header 4
Header 5
Header 6

しかし、私の問題は、サブキャット1とサブキャット2の親IDが1で、ヘッダー1に準拠しているのに対し、他のサブキャット1の親IDは5で、実際にはヘッダー5に準拠していることです。 。

これが間違っている理由がわかりました。これは、whileループのwhileループが最後に表示されるように命令し、そこに貼り付けているためです。

しかし、次のように表示されるようにこれを作り直す方法がまったくわかりません。

Header 1
 Subcat 1
 Subcat 2
Header 2
Header 3
Header 4
Header 5
 OtherSubcat 1
Header 6

サンプルテーブル:

>     ProductSubCats
>     Subcatid  |  Subcatname   | Parentid
>     1         | Subcat 1      | 1
>     2         | Subcat 2      | 1
>     3         | Othersubcat 3 | 5
> 
> 
> 
> ProductCats
>     Cat id   |   Catname
>     1        | Header 1
>     2        | Header 2
>     3        | Header 3
>     4        | Header 4
>     5        | Header 5
>     6        | Header 6

ご協力ありがとうございました

4

2 に答える 2

1

データベースクエリループを表示ループから分離する必要があります。まず、両方のクエリのすべてのデータをフェッチし、2つの連想配列に格納します。2番目のステップを簡単にするために、サブカテゴリ配列を次のように構成します。

  • キー-親ID
  • 値-この親IDを持つすべてのサブカテゴリの配列

次に、categories配列をループします。各要素について:

  • カテゴリ名を印刷する
  • この親IDを持つサブカテゴリをループします-それらを印刷します

このような:

//assuming you populated $catResults and $subCatResults as in your example
$categories = array();
$sub_categories = array();

while($row = $catResults->fetch_assoc()) {
 $categories[$row['Catid']] = $row['Catname'];
}
while($row = $subCatResults->fetch_assoc()) {
 if (!isset($sub_categories[$row['Parentid']])) {
  $sub_categories[$row['Parentid']] = array();
 }
 $sub_categories[$row['Parentid']][] = $row['Subcatname'];
}

//display
foreach ($categories as $cat_id => $name) {
 echo $name;
 if (isset($sub_categories[$cat_id])) {
  foreach($sub_categories[$cat_id] => $sub_cat_name) {
   echo '  ' . $sub_cat_name;
  }
 }
}
于 2012-12-28T23:04:51.053 に答える
1

@Pasha Bitzが言ったことに従って、あなたがやろうとしていることについて。

次のことを試してください。

$categories = array();
        $sub_categories = array();  
        while ($rows = $catResults->fetch_assoc()) {
            $categories[$rows['Catid']] = $rows['Catname'];
        }
        while($rows = $subCatResults->fetch_assoc()){
            if (!isset($sub_categories[$rows['Parentid']])) {
                $sub_categories[$rows['Parentid']] = array();
            }
            $sub_categories[$rows['Parentid']][] = $rows['Subcatname'];
        }
        foreach ($categories as $cat_id => $name) {
            echo '<div class = "categoryCluster">';
            echo '<a href="../index.php?Cat='.$name.'">'.$name.'</a>';
            echo '<br>';
            if (isset($sub_categories[$cat_id])) {
                foreach($sub_categories[$cat_id] as $cat_id => $sub_cat_name) {
                    echo '<div class="subCategoryCluster">';
                    echo '&emsp;'.'<a href="../index.php?Cat='.$name.'&'.'Subcat='.$sub_cat_name.'">'.$sub_cat_name.'</a>';
                    echo '<br>';
                }
            }
        }

これで解決するはずです。コードを調べて、ここで何が起こっているのかを理解してください。

于 2012-12-29T14:59:31.607 に答える