結果我運行此查詢,看看有多少問題,也有在每個類別:比較從兩個相同的選擇
$query = "SELECT category_table_id, COUNT(question) AS nbr FROM question GROUP BY category_table_id ORDER BY nbr";
然後我在這個問題表手動添加和刪除行。然後再次運行查詢進行比較。 然後,我如何獲得具有新行數的類別中添加或刪除的行數?
非常感謝
結果我運行此查詢,看看有多少問題,也有在每個類別:比較從兩個相同的選擇
$query = "SELECT category_table_id, COUNT(question) AS nbr FROM question GROUP BY category_table_id ORDER BY nbr";
然後我在這個問題表手動添加和刪除行。然後再次運行查詢進行比較。 然後,我如何獲得具有新行數的類別中添加或刪除的行數?
非常感謝
由於添加和刪除問題發生在同一個腳本上,因此最簡單的方法是將第一個結果以($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);
Store的第一批成果的地方(就像回到了DB),做你的手動編輯數據庫,重新查詢,比較舊的(存儲)和新的(查詢)。
如果我正確理解你的問題,你想有某種日誌記錄表類別的變化。要獲得已插入和已刪除記錄的列表,可以在表格中放置一些標記以標記刪除或插入。您還可以使用日期時間字段來獲取更改的確切時刻以備將來使用。 (例如每日報告)
如果我清楚這一點,你想要新增或刪除的行數?如果在同一頁面上需要此號碼,則可以將該金額保存在臨時變量中,然後執行添加和刪除操作,並將新金額與舊金額進行比較,發現已添加或刪除的金額。
如果您只是想顯示最近添加的問題,您應該包含一個added
列,其中包含添加問題的時間戳,以便查詢自給定時間以來的所有新問題。
用減法運算符'-'? – zerkms
我認爲如果你更具體一些,這會有所幫助:添加/刪除問題是否會在同一個腳本中發生?在以後的日子(如當用戶再次訪問該頁面)?你是否在乎如果你有5個問題,但隨後又增加了3個並刪除了3個問題,使問題的總數相同? –
這兩個查詢和問題的添加/刪除都會在這個腳本中發生。我只關心問題數量的實際變化。如果添加3行並刪除3行,我不希望它在結果中。 – Fred