Php 在添加到表中之前,请检查由10个新行组成的集合是否唯一,并用布尔值记录

Php 在添加到表中之前,请检查由10个新行组成的集合是否唯一,并用布尔值记录,php,mysql,Php,Mysql,因此,我每天都在收集前十名,创建一个临时表temp。有一个大表,timeline,它汇总了这些列表,并包含以下列: date, num, id, changed 我想检查10本书的temp中的这一集是否唯一,或者它的来源是否没有更新,值是否重复。我想在添加到时间线之前,在temp中以布尔值、更改的形式捕获这一点 我相信有更好的方法可以做到这一点,但在PHP中,我为前一天创建了一个数组,并添加了最后一个集合,并与当前集合进行比较,将结果存储在一个单独的数组$change\u数组中。我不知道如何

因此,我每天都在收集前十名,创建一个临时表temp。有一个大表,timeline,它汇总了这些列表,并包含以下列:

date, num, id, changed 
我想检查10本书的temp中的这一集是否唯一,或者它的来源是否没有更新,值是否重复。我想在添加到时间线之前,在temp中以布尔值、更改的形式捕获这一点

我相信有更好的方法可以做到这一点,但在PHP中,我为前一天创建了一个数组,并添加了最后一个集合,并与当前集合进行比较,将结果存储在一个单独的数组$change\u数组中。我不知道如何将其添加回temp,即将此0和1数组转换为一列,或在一个命令中将值添加到各自的行中。仅供参考,这些命令如下所示:

$last_ten = "SELECT num, asin FROM timeline ORDER BY date DESC, num ASC LIMIT 0,10";
$cur_ten = "SELECT num, asin FROM temp ORDER BY num ASC";
...
for ($ind = 1; $ind <= 10; $ind++) {
    $change_array[$ind] = ($currents[$ind] == $prevs[$ind]) ? 0 : 1;
}
$last_ten=“按日期描述从时间线顺序中选择数量,asin,数量ASC限制0,10”;
$cur_ten=“按num ASC从临时订单中选择num,asin”;
...

对于($ind=1;$ind决定简化,按照建议使用数组_intersect,如果整个集合甚至相差一行,则该日期的所有行都标记为不同:

$last_ten = "SELECT num, asin FROM timeline t ORDER BY t.date DESC, t.num ASC LIMIT 0,10";
$cur_ten = "SELECT num, asin FROM $table ORDER BY num ASC";

$prevs = array(1 => "", 2 => "", 3 => "", 4 => "", 5 => "", 6 => "", 7 => "", 8 => "", 9 => "",  10 => "");
    while($r = mysql_fetch_array($last_ten_res))
    {
        $num = $r['num'];
        $prevs[$num] = $r['asin'];
    }

$currents = array(1 => "", 2 => "", 3 => "", 4 => "", 5 => "", 6 => "", 7 => "", 8 => "", 9 => "",  10 => "");
    while($r = mysql_fetch_array($cur_ten_res))
    {
        $num = $r['num'];
        $currents[$num] = $r['asin'];
    }

$different = count(array_intersect($prevs, $currents)) == 10 ? 0 : 1;
$add_change = "ALTER TABLE $table ADD changed INT(1) DEFAULT $different;";

是的,这将简化对数组的比较,但我如何将其添加回表中?我不希望迭代数组并单独添加到每一行……而不是在数组中有id-s,可以在SQL语句中使用。例如,更新时间线集changed=1,其中id在(1,2,3,4,55,99)中