2013-02-21 31 views
0

我想對工程日記的API給我的信息進行排序。我已經提取了以下信息表:使用MySQL和PHP的非標準排序和導航

ID     (integer), 
Journal Entry Name (Text), 
Description  (Text), 
Page Length  (integer), 
Has Media   (boolean) 

每個「日記條目」只有一個與之關聯的ID。每個ID還具有其他特性,這些特性不是由API返回的,而是我想用來排序的。它們是:

  • 類別(如經濟學,數學,生物學事每個ID可以有多個類別。)
  • 布爾值

我創建了一個(如需要特殊訂閱的東西)第二表的格式如下:

ID  (integer), 
Category (text), 
Boolean1 (bool), 
Boolean2 (bool), 
Boolean3 (bool) 

由於每個ID可以具有一個以上的類別,當這種情況發生另一行被添加到該表。這個想法是,任何給定的行只有一個ID和一個類別。

我想要做的是這樣的:

  • 能夠找到的十大類,當談到
    • 最高日記帳分錄(ID)數
    • 最高的總頁面長度
    • 「Has Media」布爾值爲true的最高期刊條目數
  • 創建naviga像「分頁」一樣,每頁顯示上述前十名的第n個結果。
    • 因此,如果我選擇Highest Journal Entry count方法,則第一頁將顯示計數最高的類別中所有日記條目的ID,名稱和描述。

我的計劃是創建一個新的表,其中的數字1到10都在第一列,然後用十大類填充第二列。然後,我可以使用類似於分頁的過程,其中第n頁僅顯示與原始值相對應的類別的值。不過,我似乎無法做出這個前十名單/矩陣,我也不知道是否有更好的方法。

不幸的是,我不是一個MySQL或PHP編碼器的交易,只有通過大量和大量的谷歌搜索得到這一點。我一直無法找到像我想要的導航方法的任何指南。由於我不知道正確的術語,因此我只是在嘗試隨機搜索谷歌。

這是最好的方法去解決它嗎?或者,創建某種第三個表格會更好嗎?有沒有更簡單的方法可以使用我已經寫過的PHP和MySQL代碼?

+0

我不是你正在試圖做的究竟是什麼不清楚,但如果你有一個多對多的關係,你可能需要一個橋樑或「結」表。 [更多信息請點擊這裏](http://en.wikipedia.org/wiki/Junction_table) – starshine531 2013-02-21 14:52:50

回答

0

不知道我真的明白你要在這裏做什麼,但我最好的猜測是你可能想要結合你的兩個初始表,並且將類別設置爲一個集合而不是單個術語,這樣你可以有一個單一的條目每個唯一的ID。

然後,您只需根據需要爲每個前十位發現編寫調用。由於每個id可以有不確定數量的類別,因此我會以10個限制開始,然後處理以最高匹配開始的回報,獲取其類別,如果有10個以上的抓取,如果少於10個抓住有什麼,更新你正在尋找的數量(如果有4個,那麼你現在正在尋找6個),然後繼續下一個最佳匹配。

也許是這樣的:

categories = null; 
$delimeter = ','; 
$count = 1; 
$top10 = array(); 

$result = mysql_query(" 
SELECT * 
FROM table_name 
ORDER BY page_length DESC 
LIMIT 10"); 

while($row = mysql_fetch_array($result) && $count <=10) 
    { 
    $categories = $row['categories']; 
    $id = $row['id']; 
    $splitcontents = explode($delimeter, $catagories); 
    foreach($splitcontents as $category){ 
    if (!in_array($catagory,$top10)){ 
     $top10[$count] = array(
      'category'=>$category, 
      'journal_id'=>$id 
     ); 
     $count++; 
     } 
    } 
}