2013-12-09 55 views
0

我有一個具有一些多維數組的數百萬條記錄表。我需要在每一行中搜索以找到一個匹配,關鍵匹配在另一個包含數千條記錄的表中。例如,每個人可能有不同數量的教育分隔;但是,每個人可能有不同的教育數量, (分號)。我想用英國研究所的一張表格搜索那些在英國接受教育的人。在使用php mysql的大型多維數組中搜索

Name  | Educations 
------------+-------------------------------------------------------------------------- 
John Smith | Oxford University, BSc Business, UK ; London University, MSc Art, UK ; Boston University, PhD in AI, USA 
Sara Jones | Ealing college, Access to IT, UK ; Paris University, BSc Maths, France 

目前我很喜歡preg_match,但把一大堆研究所放到一個數組中, (管道)分離器似乎不起作用。雖然,限制數組少於1000似乎工作。我不確定這是否與數組大小有關?

我很感激任何關於如何使用preg_match或任何其他您知道的搜索函數來優化大尺寸數組搜索的建議。

這裏是我的代碼部分:

// query a list of institute 
$query = "SELECT institute_name FROM $table_institute limit 1000"; 
$result = mysql_query($query) or die(mysql_error()); 

// create an array of institute 
while($row = mysql_fetch_array($result)) { 
    $institute = trim($row['institute_name']); 
    $institute_array = $institute_array . "|" . $institute; 
} 

$institute_array = "/\b(" . $institute_array . ")\b/i"; 

// create a multidimensional array of educations 
$educations = unserialize ($row['educations']); 
$count_education = count($educations); 
$educations= implode (" ; " , $educations); 
$education_list = (explode (" ; ", $educations)); 
$education_array = array(); 

// check and compare both array 

if ($educations == NULL) 
$code_institute = 'Not Listed'; 
else { 
for($i=0; $i<$count_education; $i++) { 
     list ($org, $degree, $major, $start_date, $end_date) = explode(' ,, ', $education_list[$i]); 

     $education_array[$i] = array(
    'org' => trim($org), 
     'degree' => trim($degree), 
    'location' => trim($location) 
    ); 

    if (preg_match ($institute_array, $education_list[$i], $matched)) { 
      $code_institute = 'Matched'; 
     $match_no_institute = $match_no_institute + 1; 
    } 

    else 
    $code_institute = 'Not Matched'; 

print_r ("<br> Education : (" . ($i+1) . ") Matching Time: " . $match_no_institute . " Code: " . $code_institute . " " . $matched[0]); 

    } 
} 
+1

看起來像差的原始數據庫設計 - 你應該正常化第一 – 2013-12-09 20:21:40

+0

你不應該使用MySQL來記錄而不是PHP的記錄? –

+0

我同意Dragon。您打算用這種設計將數據存儲在關係數據庫中的目的。將'Educations'分解成多個表格。 – Dave

回答

0

我可能是錯的,但除非你正在尋找一個索引列,你將有不好的時候。我從來沒有聽說過任何人試圖搜索已經序列化或放入LONGTEXT或varchar字段中某種數組方式的「數組」。

一般來說,你應該使用連接表和關聯來完成你想要的。

+0

我知道我的解決方案效率不高。我是mysql和php的新手,你能通過如何使用MySQL或其他搜索功能來搜索嗎?謝謝 – user3084097