0

我有以下标记,它显示了类别和子类别的列表:

<table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr class="dataTableHeadingRow">
<td class="dataTableHeadingContent"><?php echo TABLE_HEADING_PRODUCTS; ?></td>
<td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_TOTAL_WEIGHT; ?>&nbsp;</td>
</tr>


<?php
function category_list( $category_parent_id = 0 )
{
    $sql  = 'select cd.categories_name,c.categories_id, c.parent_id, c.sort_order from ' . TABLE_CATEGORIES . ' c, ' . TABLE_CATEGORIES_DESCRIPTION . ' cd where c.categories_id = cd.categories_id AND c.parent_id='.$category_parent_id;
    $res  = tep_db_query( $sql );
    $cats = array();


    while ( $cat = tep_db_fetch_array( $res ) )
    {
        $cats[] = $cat;
    }

    if (count($cats) == 0)
    {
        return '';
    }

    $list_items = array();

    foreach ( $cats as $cat )
    {
        $list_items[] = '<tr class="dataTableRow"><td class="dataTableContent">'; 

        if($category_parent_id != 0) $list_items[] = '&nbsp;&nbsp;&nbsp;';
        if($category_parent_id == 0 )$list_items[] = '<b>';

        $list_items[] = $cat['categories_name'];

        if($category_parent_id == 0) $list_items[] = '</b>';
        $list_items[] = '</td><td class="dataTableContent">'; 
        $list_items[] = category_list( $cat['categories_id'] );
        $list_items[] = '</td></tr>'; 
    }
    $list_items[] = '';

    return implode( '', $list_items );
}  

echo category_list();
?>
</table>

每个类别都以粗体显示,子类别略微向右缩进显示。我需要展示每个子类别中可用的产品。我尝试将所需的产品字段添加到 sql 查询中,但它没有响应。我需要添加以搜索产品的字段是:products_id, products_name,这些来自表TABLE_PRODUCTS_DESCRIPTION,并且为了对其类别进行排序,还有另一个名为 的表TABLE_PRODUCTS_TO_CATEGORIES,其中包含字段products_id and categories_id

我该怎么做呢?

4

2 回答 2

0

我不太喜欢from查询中加入 2 个表的内容。我以我喜欢的方式更改了查询。from如果你愿意,你可以改变它的方式。

$sql  = 'select cd.categories_name,c.categories_id, c.parent_id, c.sort_order, pd.products_id, pd.products_name
from ' . TABLE_CATEGORIES . ' c 
inner join ' . TABLE_CATEGORIES_DESCRIPTION . ' cd on c.categories_id = cd.categories_id 
inner join '. TABLE_PRODUCTS_TO_CATEGORIES .' pc on pc.categories_id=c.categories_id 
inner join ' . TABLE_PRODUCTS_DESCRIPTION . ' pd on pd.products_id=pc.products_id
where c.parent_id='.$category_parent_id;
于 2012-10-01T14:29:31.343 回答
0

看起来您正在使用 osCommerce 或其分支之一,并且您希望显示每个类别的产品数量。

如果您只有两个级别的类别可以做,如果您的类别树更深,请注意这是一个真正的性能杀手,因为在 osCommerce 中构建类别树已经完成,比方说,并没有真正优化性能,尤其是对于复杂的树结构。

直接的方法是,计算该TABLE_PRODUCTS_TO_CATEGORIEScategories_id包含当前类别 ID 的表的条目:

$query = 'SELECT COUNT(*) FROM `'.TABLE_PRODUCTS_TO_CATEGORIES.'` WHERE `categories_id` = "'.$cat['categories_id'].'"';

获取结果,你就有了计数。

使用这种方法,您只能直接获得 tnis 类别中的产品数量,而不是位于子类别中的产品数量。

您可能还可以查看一下,includes/boxes/categories.php因为这已经内置在 osC 中 - 方法tep_show_category()和此处调用的方法tep_count_products_in_category()可能可用于您的目的,因此无需自己编写。

于 2012-10-01T14:21:16.440 回答