我无法确定如何查询特定类别中的每个项目,并且仅按日期列出最新的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;
}
答案 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个人运行,而不是每个正在访问的人。