【发布时间】:2010-05-25 02:01:06
【问题描述】:
我无法弄清楚如何查询某个类别中的每个项目,并且只按日期列出最新的 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;
}
【问题讨论】:
-
类别
has 100 items是否意味着100条下载记录的downloads.category_id等于类别的id?或者这 100 个计数是否还包括属于该类别的子类别的任何项目?我可以更混乱地表述这个评论吗? -
这意味着下载也属于子类别。我在想我必须递归地遍历每个项目并将其放入一个大数组中,然后从那里排序。
标签: php mysql parent-child