0

私は2つのテーブルを持っています:

  1. ネコ

id,cat_name

  1. サブキャット

id、subcat_name、under_cat

サブカテゴリを正しいカテゴリにロードするリストを作成したいのですが、問題は 2 番目のループにあり、それを機能させることができません。何が間違っていますか?

    <?
        $query = "SELECT * FROM `Cat`";
        $result = $mysqli->query($query);
        while ($row = $result->fetch_assoc()){
            echo '<li><a href="#">'
            . $row['cat_name'] .
            '</a><ul>';
                $query2 = "SELECT * FROM `SubCat` WHERE under_cat = '". $row['cat_id'] ."'";
                $result2 = $mysqli->query($query2);
                while ($row2 = $result->fetch_assoc()){
                    echo '<li><a href="#">'
                    . $row2['subcat_name'] .
                    '</a></li>';
                }

            echo '</ul></li>';
        }
    ?>

編集:

ここに画像の説明を入力 同じカテゴリの 2 つのリスト

これはコードです:

    <?
        $query = "SELECT * FROM Cat LEFT OUTER JOIN SubCat ON SubCat.under_cat = Cat.cat_id;";
        $result = $mysqli->query($query);
        while ($row = $result->fetch_assoc()){
            echo '<li><a href="#">'
            . $row['cat_name'] .
            '</a><ul>';
                if($row['cat_id'] === $row['under_cat']){
                echo '<li><a href="#">'.$row['subcat_name'].'</a></li>';

}

            echo '</ul></li>';
        }
    ?>
4

1 に答える 1

0

メンテナンスの問題があるので嫌いSELECT *ですが、あなたがしたことを処理するには、次のようにしますJOIN

"SELECT * FROM Cat LEFT OUTER JOIN SubCat ON SubCat.under_cat = Cat.cat_id;"

これにより、必要な結果セットが返されますが、リストを適切に作成するには、次のように PHP を変更する必要があります。

if($row['cat_id'] === $id){
    echo '<li><a href="#">'.$row2['subcat_name'].'</a></li>';
} else {
    echo '</ul></li><li><a href="#">'.$row['cat_name'].'</a><ul>';
    iF(!empty($row['subcat_name'])){
        echo '<li><a href="#">'.$row['subcat_name'].'</a></li>';
    }
}

$id = $row['cat_id'];

これにより、前のエントリと同じ場合はリストにアイテムが追加され、そうでない場合は新しいリストが開始されます。!empty問題は、一致が返されSubCatなかったが にエントリがあった場合のように、NULL を処理するための迅速な試みですCat。これが決して当てはまらない場合は、ifステートメントを削除して、クエリを次のように変換できます。

"SELECT * FROM Cat INNER JOIN SubCat ON SubCat.under_cat = Cat.cat_id;"

なぜあなたが求めるこのすべての努力をするのですか?これは、一度だけクエリを実行するだけで、必要な結果セットが提供されるためです。以前に構造化した方法では、何億回もクエリを実行するため、サーバーが停止し、パフォーマンスが大幅に低下します。

うまくいけば、これはあなたの問題とあなたの全体的な実装知識の両方に役立ちます。

于 2013-10-29T22:12:38.903 に答える