2010-05-14 16 views
0

我無法確定如何查詢某個類別中的每個項目,並且只按日期列出最新的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

類別'是否有100個項目'意味着100個下載記錄有downloads.category_id等於該類別的ID?或者,這100個計數是否也包含屬於該類別的子類別的任何項目?我能否更容易混淆這句話? – webbiedave 2010-05-14 21:05:16

+0

這意味着下載也是在子類別中。 我在想我必須遞歸遍歷每一個項目,並把它放在一個大數組中,然後從那裏排序。 – RogeR 2010-05-14 22:00:58

回答

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/

+0

當然,我知道如何查詢某個類別,但它也需要遍歷所有子類別。我正在閱讀該頁面,但似乎只是討論查詢其他類別,而不是查詢與它們相關的項目? – RogeR 2010-05-14 21:06:19

+0

Mysql至少不允許遞歸查詢。你必須以編程方式進行,循環通過子類別。 – mhughes 2010-05-14 21:09:30

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

如果有幫助,當我處理複雜的類別結構時,以下是我如何處理它。我儘可能多的查詢,因爲我想讓我作爲開發人員輕鬆整理它。螺桿性能。然後根據需要緩存輸出,並使用緩存的文件供公衆使用。類別不會經常更改,因此那些資源耗盡的查詢只有在管理員正在更改時纔會運行,並且一次只能由一個人進行,而不是每個正在訪問的人。

相關問題