1

列を持つメニューというテーブルがあります(sequence, page_seq, name, parent_id)

sequenceそしてpage_seq無関係です

空白のある行parent_idはトップ メニュー項目で、parent_id空白でない行はサブ メニュー項目です。

したがって、名前Top Itemparent_id空白の行があり、シーケンスが 1 で、名前Sub 1parent_id1 の別の行があるとします。カーソルTop Itemを合わせるSub 1と、サブメニュー項目として表示されます。

これらをバックエンドの管理パネルにグループで表示しようとしています。そのため、その下にサブリンクがあるトップメニュー項目があります...

Top Item 1
- Sub 1
- Sub 2

Top Item 2
- Sub 3
- Sub 4

等々...

ここに私がこれまでに持っているPHPがあります:

<table border="0" cellpadding="5" cellspacing="5">
    <tr>
        <td><strong>Name</strong></td>
    </tr>
    <?php
    $sql=" SELECT * FROM menu where parent_id = '' ";
    $rs=mysql_query($sql,$conn) or die(mysql_error());
    while($result=mysql_fetch_array($rs))
    {
        echo '<tr>
        <td>'.$result["name"].'</td>
        </tr>';
        $sql2="SELECT * from menu where parent_id != '' ";
        $rs2=mysql_query($sql2,$conn) or die(mysql_error());
        while($result2=mysql_fetch_array($rs2))
        {
            echo '<tr>
            <td><dir>'.$result2["name"].'</dir></td>
            </tr>';
        }
}
?>
</table>

ただし、各サブメニュー項目の下にトップメニュー項目が表示されます。

どうすればこれを達成できますか?

4

2 に答える 2

1

$sql2 の実行中に、親が現在表示されているトップ メニュー項目のシーケンス (=id) であるすべての子を選択していることを確認してください。

$sql2= 'SELECT * from menu where parent_id = "'.$result['sequence'].'"';
于 2013-08-29T18:36:10.347 に答える
0

親と子を格納するために同じテーブルを使用しているようです。
親は、parent_id を空白にすることで定義されます。
子は、parent_id が空白でないことによって定義されます。
子と親がどのようにリンクされているかわかりません。

最初のクエリはループについて設定し、親を取得します。ループごとに、別のループでその親のすべての子を表示する必要があります。
2 番目のループで定義する必要があります。表示する子を知るために、最初のループから現在どの親がプレイされているかを定義する必要があります。

$sql2="SELECT * from menu where parent_id != '' AND name = $result['XX']"

最初のループの現在の親はどこ$result['XX']にあり、親を子にリンクするものは何でもありますが、どの親がどの子にリンクされているかを判断するために何を使用するかわかりません-名前

提案/情報 あなたはチェックしていません (多分あなたはチェックしていて、ここでは簡単な例ではありません)。どちらのクエリでも何も見つからない場合はどうなりますか? または、最初のループで親が見つかり、2 番目のループで子が見つからない場合は?
物事をチェックし、データや結果などがあることを確認する必要があります。そうしないと、メニュー項目が空白になったり、さらに悪い結果になる可能性があります。

これは、すべての親用とすべての子用の 2 つのテーブルで改善できるようです。親と子の間のリンクとして、子テーブルで使用される親テーブルからの一意の参照を使用します。
したがって、特定の親のいくつかの子を更新して選択したり、特定の子の親を見つけたりすることができます。

または、少なくとも 1 つのテーブルを使用している場合は、親と子を決定する列を使用して、親と子を厳密に定義します。つまり、type=parent、type=child です。これにより、役割を持たない (つまり、parent_id = 空) に基づいて何かの役割を決定する際に発生する可能性のある問題が取り除かれます。

いつものように、それは必ずしもあなたの正確な要件に適しているわけではなく、それが提案/情報である理由です:)

于 2013-08-29T19:29:17.470 に答える