【问题标题】:List products from nested categories列出嵌套类别中的产品
【发布时间】:2012-09-15 03:41:30
【问题描述】:

我为我的项目处理分层类别和产品表。

类别表结构:

ID - 父级 - 标题

1 - 0 - 计算机

1 - 0 - 电话

...

第 25107 行的类别表计数。

产品表结构

ID - CAT - 标题

1 - 1 - 产品名称在这里

我想要列表产品的当前类别和子类别。

echo $subcats = categoryChild(0);

输出为:64198,18355,18356,95623,90504,6118,90505,6117,90506,90507,6119,6120,90508,90509,90510,90511,6103,90512,90513,90514,6851 14205119051190511905119051190518905 ,,9111905119051890581890568890568958188989889898989895889898958898989889898988905689898905 142698,142700,3596

我正在使用这个输出 MySQL IN 语句。 最后生成这个 SQL 查询:

SELECT * FROM products WHERE cat IN (64198,18355,18356,95623,90504,6118,90505,6117,90506,90507,6119,6120,90508,90509,90510,90511,6103,90512,90513,90514,90515,142686,142688,142790,90516,6105,90517,90518,90519,90520,90521,91691,91692,92189,92190,92312,92313,95618,95619,95620,95621,95622,142684,142690,142692,142694,142696,142698,142700,3596)

这个查询很慢...请帮助我。

【问题讨论】:

  • 一个非常基本的检查,但是您是否为“cat”字段编制了索引;-)?
  • 你如何得到 $subcats = categoryChild(0) ?
  • categoryChild 是从 parentId 生成类别 id。 0 是父 ID

标签: php mysql


【解决方案1】:

使用它可以让你为 parent_id 参数获取 cat 和 sub cat。 它是嵌套的,可以是 CSS 和 html 的样式。

`

     <ul class="" id="">

<?php
   function query($parent_id, $extension = null) { //function to run a query
   $query = mysql_query ( "SELECT * FROM exe_categories WHERE parent_id=$parent_id");
   return $query;
}
   function has_child($query) { //This function checks if the menus has childs or not
   $rows = mysql_num_rows ( $query );
   if ($rows > 0) {
    return true;
   } else {
    return false;
   }
}
function fetch_menu($query) {
   while ( $result = mysql_fetch_array ( $query ) ) {
     $id = $result ['id'];
     $title = $result ['title'];
     $menu_link = $result ['menu_link'];
     echo "<li><a href='{$menu_link}'><span>{$title}</span></a>";

        if (has_child ( query ( $id ) )) {
                    echo "<div>";
                    echo '<ul role="menu" class="fofc">';

                    fetch_menu ( query ( $id ) );
                    echo "</ul>";
                    echo "</div>";
        }

             echo "</li>";
      }
 }
   fetch_menu (query(1)); //call this function with 1 parent id

 ?>`

【讨论】:

    【解决方案2】:

    试试这个:

    select p.id as id, p.title as title, c.title as category, c.id as catid
    from products p JOIN
    (select * from category where id = 1 OR parent = 1) c
    on p.cat = c.id
    

    看看它在SQLFIDDLE上是如何工作的

    要列出所有层次结构,请编写如下代码:

    // return all childs of category with id $cat
    function list_childs($cat){
        // run above query and change (select * from category where id = 1 OR parent = 1)
        // to (select * from category where parent = $cat) and return results
    }
    

    然后在您的代码中为您想要获得儿童的每个类别调用此函数

    【讨论】:

    • 我怎样才能使用更多的子类别ID?因为你的 sql 代码只有 id 和 parent id。我使用分层类别
    • 您的类别层次结构有限?或者你想得到所有层次的孩子?
    • 我想获得所有层次的孩子。
    • 法纳巴兹,你有什么想法吗?因为您的解决方案部分为我运行。
    • 获取所有层级,编写一个函数listChilds($cat)列出下一级子级并为子级递归调用函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多