2013-01-13 30 views
0

所以每一天前,我聚集了前10名,創建臨時表溫度。有一個大表,時間表,它彙集這些列表,有以下欄目:檢查設置的10個新行是唯一增加表,記錄與布爾

date, num, id, changed 

我要檢查這一套是否溫度 10的書籍是獨一無二的,還是它的來源不是招」已經更新並且值是重複的。我想在一個布爾捕捉到了這個,增加時間表一改之前,在溫度

我確定有更好的方法來做到這一點,但在PHP中,我爲前一天創建了一個數組,並添加了最後一組數據,並與當前組相比較,將結果存儲在一個單獨的數組中$ change_array 。我不知道如何添加此回臨時,即該陣列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; 
} 

感謝您的幫助!

+0

array_intersect()? – vodich

+0

是的,這將簡化比較數組,但我將如何將它添加回表中?我不希望迭代這個數組,並添加到每行單獨... –

+0

比如果你有ID-S的陣列,你可以在SQL中使用報表英寸例如更新時間軸設置更改= 1其中ID IN(1,2,3,4,55,99) – vodich

回答

0

決定只是爲了簡化,使用array_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;"; 
相關問題