我有一张包含一些多维数组的数百万条记录的表。我需要在每一行中搜索以找到匹配项,密钥匹配在另一个包含数千条记录的表中。
例如,每个人可能有不同的教育数量; (半结肠)。我的目标是在英国研究所的桌子上搜索那些在英国接受教育的人。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]);
}
}
答案 0 :(得分:0)
我可能会弄错,但除非您正在搜索索引列,否则您将遇到不好的时间。我从来没有听说有人试图在LONGTEXT或varchar字段中搜索已经序列化或放入某种阵列方式的“数组”。
一般来说,您应该使用连接表和关联来完成您想要的任务。