2011-09-04 133 views
1

結果我運行此查詢,看看有多少問題,也有在每個類別:比較從兩個相同的選擇

$query = "SELECT category_table_id, COUNT(question) AS nbr FROM question GROUP BY category_table_id ORDER BY nbr"; 

然後我在這個問題表手動添加和刪除行。然後再次運行查詢進行比較。 然後,我如何獲得具有新行數的類別中添加或刪除的行數?

非常感謝

+0

用減法運算符'-'? – zerkms

+0

我認爲如果你更具體一些,這會有所幫助:添加/刪除問題是否會在同一個腳本中發生?在以後的日子(如當用戶再次訪問該頁面)?你是否在乎如果你有5個問題,但隨後又增加了3個並刪除了3個問題,使問題的總數相同? –

+0

這兩個查詢和問題的添加/刪除都會在這個腳本中發生。我只關心問題數量的實際變化。如果添加3行並刪除3行,我不希望它在結果中。 – Fred

回答

1

由於添加和刪除問題發生在同一個腳本上,因此最簡單的方法是將第一個結果以($category_table_id => $num_questions)的形式存儲在數組中,並在第二個查詢中減去第一個查詢的結果。

翻譯爲代碼:

mysql_connect(...); 

$read_category_counts_query = "SELECT category_table_id, COUNT(question) AS nbr FROM question GROUP BY category_table_id ORDER BY nbr"; 

function read_category_counts() { 
    $result = mysql_query($read_category_counts_query); 

    $counts = array(); 
    while ($row = mysql_fetch_assoc($result)) { 
     $counts[$row['category_table_id']] = $row ['nbr']; 
    } 

    mysql_free_result($result); 

    return $counts; 
} 

function compare_category_counts($before, $after) { 
    $difference = array(); 

    foreach ($before as $key => $val) { 
     if (!isset($after[$key]) $after[$key] = 0; 
    } 

    foreach ($after as $key => $val) { 
     if (!isset($before[$key]) $before[$key] = 0; 
     $diff_val = $val - $before[$key]; 
     if ($diff_val != 0) { 
      $difference[$key] = $diff_val; 
     } 
    } 

    return $difference; 
} 

$initial_count = read_category_counts(); 

// do something ... 

$current_count = read_category_counts(); 
$differences = compare_category_counts($initial_count, $current_count); 
+0

這正是我所需要的(我在if子句中添加了一個缺失的括號,並將第一個變量定義移入該函數中)。 – Fred

+0

非常感謝您的優質幫助! – Fred

+0

很高興幫助! –

1

Store的第一批成果的地方(就像回到了DB),做你的手動編輯數據庫,重新查詢,比較舊的(存儲)和新的(查詢)。

0

如果我正確理解你的問題,你想有某種日誌記錄表類別的變化。要獲得已插入和已刪除記錄的列表,可以在表格中放置一些標記以標記刪除或插入。您還可以使用日期時間字段來獲取更改的確切時刻以備將來使用。 (例如每日報告)

0

如果我清楚這一點,你想要新增或刪除的行數?如果在同一頁面上需要此號碼,則可以將該金額保存在臨時變量中,然後執行添加和刪除操作,並將新金額與舊金額進行比較,發現已添加或刪除的金額。

如果您只是想顯示最近添加的問題,您應該包含一個added列,其中包含添加問題的時間戳,以便查詢自給定時間以來的所有新問題。