比较两个相同选择的结果

时间:2011-09-04 12:01:36

标签: php mysql

我正在运行此查询以查看每个类别中有多少问题:

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

然后我手动添加和删除问题表中的行。然后我再次运行查询进行比较。 然后,我如何获得具有新行数的类别中添加或删除的行数?

非常感谢

4 个答案:

答案 0 :(得分:1)

将您的第一个结果存储在某个地方(比如回到数据库中),进行手动数据库编辑,重新查询,比较旧(存储)和新(查询)。

答案 1 :(得分: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);

答案 2 :(得分:0)

如果我正确理解了您的问题,您希望在表类别中记录某些更改。要获得插入和删除记录的列表,可以在表中放置一些标记以标记删除或插入。您还可以使用日期时间字段来确定更改的确切时刻以供将来使用。 (例如每日报告)

答案 3 :(得分:0)

如果我明白这一点,你想要新添加或删除的行数量?如果在同一页面上需要此号码,您可以将金额保存在临时变量中,然后执行添加和删除操作,并将新金额与旧金额进行比较,发现已添加或删除的金额。

如果您只想显示最近添加的问题,则应添加added列,其中包含添加问题的时间戳,以便您可以查询自给定时刻以来的所有新问题。