2012-12-21 42 views
4

我有一個大型的數據存儲在一個多維數組中。一個例子結構如下:php&mysql:最有效的方法來檢查大型數組與數據庫

Array 
(
    [1] => Array 
     (
      [0] => motomummy.com 
      [1] => 1921 
      [2] => 473 
     ) 
    [4] => Array 
     (
      [0] => kneedraggers.com 
      [1] => 3051 
      [2] => 5067 
     ) 
) 

我也有一個表在MySQL數據庫中currently包含〜80K域名。這個列表每月可能增加約10K個域名。目標是將Array [] [0](域名)與mysql數據庫進行比較,並返回一個包含唯一值的保存值的數組(但重要保存是而不是重要)。

請注意,我只想比較第一個索引,而不是整個數組。

初始多維數組的大小被認爲是巨大的(更可能是從10萬到1000萬的結果)。回到數據庫的最佳方式是什麼?

我現在所做的只是將數據庫中的完整域列表存儲到數組中,然後使用以下函數將初始數組中的每個值與數據庫數組進行比較。這顯然非常緩慢和低效。

// get result of custom comparison function 
$clean = array_filter($INITIAL_LIST, function($elem) { 
$wordOkay = true; 

// check every word in "filter from database" list, store it only if not in list   
    foreach ($this->domains as $domain) { 
     if (stripos($elem[0], $domain) !== false) { 
      $wordOkay = false; 
      break; 
     } 
    } 

    return $wordOkay; 
}); 

一些僞代碼甚至實際代碼在這一點上會非常有幫助。

+0

所以你想要數據庫中不存在的''數組''的條目? – dualed

+0

準確地說,也許我會將我的問題重新說明一點。 –

+0

爲什麼不直接使用'SELECT'語句 – Baba

回答

2

使用DBMS!這是爲了這樣的東西。

  • 創建一個臨時表temp {id(用數組索引填充); URL(充滿URL)}

  • 與陣列的數據填充它

  • temp.url

  • 查詢理想的情況下創建索引數據庫:

    SELECT * FROM `temp` LEFT JOIN `urls` 
    WHERE urls.url = temp.url AND urls.url IS NULL; 
    

    (表urls是您現有的數據)

相關問題