0

これが私がこれまでに持っているもののマークアップです:

<?php

$categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.categories_image, c.parent_id, c.sort_order, c.date_added, c.last_modified from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = cd.categories_id order by c.sort_order ASC");
while ($categories = tep_db_fetch_array($categories_query)){

echo '<tr class="dataTableRow">
<td class="dataTableContent">' . $categories ['categories_name'] . '</td>';
?>

<td class="dataTableContent"></td>

<?php
echo '</tr>';
}
?>

これにより、すべてのカテゴリとサブカテゴリがすべてページに表示されますが、順番どおりに、サブカテゴリをメインカテゴリの下に表示する必要があります。私はそれをどのように行うか、sort_orderフィールドとフィールドの間のリンクについていくつかの手がかりを持っていparent_idます。メインカテゴリはsort_orderフィールドをidとして使用し、サブキャットはparent_idフィールドを使用してそれらが属するカテゴリを並べ替えます。何か案は?

4

1 に答える 1

2

単一の MySQL クエリでカテゴリ ツリーを表示する方法がわからないため、再帰的な PHP 関数を使用することをお勧めします。

<?php
    function showChildCategories($parent) {
       $parent = intval($parent);

       // Select only categories with parent_id = $parent
       $categories_query = tep_db_query("select 
               cd.categories_name,
               c.categories_id
           from " . TABLE_CATEGORIES . " c, " . 
               TABLE_CATEGORIES_DESCRIPTION . " cd 
           where c.categories_id = cd.categories_id 
                 and c.parent_id = $parent
           order by c.sort_order ASC");

       // Go through all query result rows
       while ($categories = tep_db_fetch_array($categories_query)){
           // Show category name
           echo '<tr class="dataTableRow"><td class="dataTableContent">' . 
               $categories ['categories_name'] . '</td></tr>';

           // Show child categories for current row
           showChildCategories($categories ['categories_id']);
       } // while
    } // function showChildCategories

    // Show top-level categories and all their children recursively
    showChildCategories(0);
?>
于 2012-09-25T14:40:43.923 に答える