無制限のサブカテゴリメニューを作成するためにmysqlデータベースからデータを抽出する方法を探しています。メニューには約1500のカテゴリがあり、次の形式でデータベーステーブル(メニュー)に保存されます。
category_id、category title、parent_id
すべてのデータを配列に入れるために1つのmysqlクエリを実行したいと思います。
$menu_list =array();
$query = mysql_query("SELECT * FROM menu ORDER BY category_id ASC");
if(mysql_num_rows($query) != 0) {
while($row = mysql_fetch_array($query)){
$category_id = $row['category_id'];
$title = $row['category_title'];
$parent_id = $row[parent_id'];
$menu_list[] = array($category_id,$title,$parent_id);
}
}
これは、データを配列に変換するために現在使用しているコードです。
次に、配列をループしてメニューを作成する必要があります。
次に、すべてのサブカテゴリを非表示にして、jqueryで展開します(このビットは問題なく実行できます)
私が抱えている問題は、配列を調べてデータを正しい順序で表示することです。メニューには無制限のサブカテゴリがあるため、データを取得するには再帰関数である必要があります。ここで多くの例を実行しましたが、データの表示方法がわかりません。
私は今で終わる必要があります:
main item
sub cat
sub cat
sub cat
sub cat
main item
sub cat
main item
main item
sub cat
sub cat
sub cat
sub cat
sub cat
etc...
各カテゴリが独自のdivにある場合、各カテゴリを編集できる必要があります(つまり、必要に応じてタイトル名と位置)。サブカテゴリのベースとなる場所を変更すると、ページをすばやく更新すると、メニューが新しい順序で再読み込みされます。 ..
最終的にはこれをドラッグアンドドロップにしたいと思いますが、それは後日行われます。
これで十分に説明できたと思います。
前もって感謝します..
そのため、問題が再び発生しました...別のmysql selectを呼び出すajaxの方法は、CMSセクションでは時々しか使用されなかったため、問題ありませんでした。しかし今、私たちはフロントエンドに到達しました。ページが表示されるたびに、メニューの最初の3つのレベルが多数のmysqlリクエストを使用してプルされます。カテゴリが大きくなるにつれて、これにより1600以上のカテゴリがそれぞれ何度もプルされ、1日あたり1000回の訪問でも、1日あたり1000000を超えるSQLリクエストが発生します。したがって、カテゴリを配列にプルしてから、再帰的に配列を調べる必要があると思います。
私は上記の解決策を見てきましたが、それらは紙の上で機能しているように見えますが、実際には機能していません。
誰かが私に別の解決策を与えることを試みることができるならば、それはありがたいです。
私のデータベースに要約すると、私は:id、category_name、parent_idを持っています
現在、mysqlでPDOを使用しており、セキュリティを強化するためのプリペアドステートメントを使用しています。
前もって感謝します..