仅查询父/子类别中指定数量的项目

时间:2010-05-14 20:59:47

标签: php mysql parent-child

我无法确定如何查询特定类别中的每个项目,并且仅按日期列出最新的10个项目。这是我的表格布局:

download_categories

category_id (int) primary key
title (var_char)
parent_id (int)</pre></code>

downloads

id (int) primary key
title (var_char)
category_id (int)
date (date)</pre></code>

我需要查询主类别中的每个文件,例如,有100个项目和5个子类别,并且只吐出最后添加的10个。我现在有功能只是添加所有文件,所以我可以按类别计算,但我似乎无法修改代码只显示基于日期的一定数量的项目。

我修改了我用来计算类别中所有文件及其子项列出文件的代码。主要问题是当我向我的SQL添加LIMIT子句时,它只限制从该类别列出的结果,而不是整个查询。

代码将所有下载类别放入一个数组中,然后遍历每个下载类别,使用该category_id查询下载。

我最好的选择是将结果放在一个数组中,然后从那里对它进行排序吗?

function list_cat_files($parent, $start) {

    global $menu_array;

    if($start == 1) {

        unset($GLOBALS["total"]);

        $query = mysql_query("SELECT * FROM download_categories");

        while ( $row = mysql_fetch_assoc($query) ) {

            $menu_array[$row['category_id']] =
              array(
                'name'        => $row['title'],
                'parent'      => $row['parent_id'],
                'category_id' => $row['category_id']);

        }
    }

    foreach($menu_array as $key => $value) {

        global $total;

        if ($value['parent'] == $parent) {

            $category_id = $value['category_id'];

            $query1 = mysql_query("SELECT lid AS id, title, date, category_id FROM downloads WHERE category_id='$category_id'");

            while($item = mysql_fetch_array($query1)) {

                $total .= "--- ($item[lid]) : $item[title] <BR><BR>";
            }

            list_cat_files($key, 0);
        }
    }
    return $total;
}

2 个答案:

答案 0 :(得分:0)

select * from downloads where category_id=X order by date limit 10

对每个类别重复。除非你想实现嵌套集/ modified preorder tree traversal(MPTT):http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

答案 1 :(得分:0)

这样的事情有帮助吗?假设$ categories是您想要的类别ID的数组。

$query = FALSE;


foreach ($categories as $category){
    $query .= $query ? ' UNION ': '';

    $query .= "SELECT * from `downloads`
        WHERE category_id=$category order by date limit 10\n";

}

// run query here

如果它有帮助,当我处理复杂的类别结构时,我就是这样做的。作为开发人员,我尽可能多地进行查询,以便为我轻松排序。螺杆性能。然后我根据需要缓存输出并使用缓存文件进行公共使用。类别不会经常改变,因此那些资源饥渴的查询只会在管理员改变事物的时候运行,而且每次只能由1个人运行,而不是每个正在访问的人。