2

カテゴリのナビゲーションの表示に取り掛かるまで、順調に進んでいるシンプルなeコマースシステムを構築するプロジェクトに取り組んできました。

MySQLでカテゴリを作成すると、次のようになります。

id             name             parent_id
1              books            null
2              art              1
3              biography        1
4              games            null
5              electronics      null
6              FPS              4

親カテゴリを取得してから子カテゴリを取得するために、次のSQLを記述しました。

SELECT parent.name AS parent_name, child1.name AS child1_name
FROM categories AS parent
LEFT OUTER JOIN categories AS child1 ON child1.parent_id = parent.id
WHERE parent.parent_id IS NULL
ORDER BY parent_name, child1_name

この結果、複数の配列を含む配列になります。

Array
(
    [0] => Array
    (
        [parent_name] => Books
        [child1_name] => Art
    )

    [1] => Array
    (
        [parent_name] => Books
        [child1_name] => Biography
    )

    [2] => Array
    (
        [parent_name] => Clothes, Shoes & Watches
        [child1_name] => 
    )

    [3] => Array
    (
        [parent_name] => Computers & Office
        [child1_name] => 
    )

    [4] => Array
    (
        [parent_name] => Electronics
        [child1_name] => 
    )
)

この情報を順序付けられていないリストとして表示するのに問題があります。望ましい効果は次のようになります。

<ul>
    <li>Books
        <ul>
            <li>Art</li>
            <li>Biography</li>
        </ul>
    </li>
    <li>Computers</li>
    <li>Electronics</li>
</ul>

誰かがこの問題の解決策を持っていますか?MySQLコードまたはデータベース構造を変更する必要がありますか?

前もって感謝します。

4

1 に答える 1

3

解決策は単純ではありませんが、uで機能します:)。

$newArray = array();
foreach($arrayFromDatabase as $key => $category){
   //replace key
   $newArray[$category['parent_name']][] = $category['child1_name'];   
}

//Open list
$toEcho = "<ul>";
foreach($newArray as $name => $subCat){
   if(!empty($subCat)){
     $toEcho_ = "<ul>";
     foreach($subCat as $cat){
        $toEcho_ .= "<li>$cat</li>";   
     }
     $toEcho_ .= "</ul>";
     $toEcho .= "<li>$name $toEcho_</li>"; 
   } else{
      $toEcho .= "<li>$name</li>";   
   } 
}

//Close list
echo $toEcho . "</ul>";
于 2012-11-18T17:56:26.137 に答える