检测触发数组中增量编号更改的记录

时间:2015-09-22 17:26:32

标签: php mysql increment

我有一组记录,每个记录都有一个数字

NAME    | NUMBER
Record1 | 1
Record2 | 2
Record3 | 3
Record4 | 4
Record5 | 5
Record6 | 6
Record8 | 7

可以更新表格,下面列出了可能的版本

NAME     | NUMBER
Record1  | 1
Record2  | 2
Record4  | 3
Record5  | 4
Record6  | 5
Record7  | 6
Record10 | 7

每次在现有记录之前添加记录时,新记录之后的所有记录的编号都会发生变化。如果添加了一条记录,编号将增加1,如果添加两条记录,编号将增加2,依此类推。此外,更新后,表的行数可能比之前少。

当满足某些条件时,例如当其状态标志发生变化时,会在表中添加和删除每一行。

在将记录添加到特定表格中之前,我无法知道记录的顺序,也不知道它们是否会被添加,以便从一开始就分配一个唯一的数字。

我正在比较更改前后的表以检测任何更改,并且返回的结果是具有新编号的所有行,但不会返回触发更改的行。

$a = array_diff($tableBefore, $tableAfter);
$b = array_diff($tableAfter, $tableBefore);

$differences = array_merge(array_diff($a, $b), array_diff($b, $a));

我需要检测单个记录或触发增量编号更改的记录集。

如果不解析foreach循环并检查每条新旧记录是否存在和/或是否有新号码,我该如何实现?

1 个答案:

答案 0 :(得分:1)

将表数据加载到关联数组中,例如

$tableBefore = array(
    'Record1' => 1,
    'Record2' => 2,
    ...
    'Record8' => 7
);
$tableAfter = array(
    'Record1' => 1,
    'Record2' => 2,
    ...
    'Record10' => 7
);

然后使用

$differences = array_merge(array_diff_assoc($tableBefore, $tableAfter),
                           array_diff_assoc($tableAfter, $tableBefore));
相关问题