我的 ajax 搜索查询的响应时间变慢(2 秒)。我相信这与我的逻辑有关。这是我的逻辑的描述:
- 用户键入单词的排列。
- 在我的代码中,我将字符串拆分为单独的单词。
- 对于每个单词,我运行一个查询来选择包含该单词的数据。我正在使用 LIKE 语句,因为我正在尝试查找包含该单词的数据。
- 最后,我
array_intersect
对数据集执行一次,只留下包含查询中所有单词的结果。 - 我立即发送 json 响应。
我相信我应该要么union
对单词做一个,要么可能执行一个包含AND
针对所有单词的语句的选择语句。
foreach($searchParts as $part){
$sql="SELECT contacts.id AS contactid
FROM contacts
WHERE contacts.addressbook_id =$addressBookId AND";
$sql.="(contacts.firstname LIKE '%".$part."%' OR ";
$sql.="contacts.middlename LIKE '%".$part."%' OR ";
$sql.="contacts.lastname LIKE '%".$part."%' OR ";
$sql.="contacts.primary_emailaddress LIKE '%".$part."%' OR ";
$sql.="contacts.alternate_emailaddress LIKE '%".$part."%' OR ";
//$sql.="contacts.gender LIKE '%".$part."%' OR ";
$sql.="contacts.personal_address_line1 LIKE '%".$part."%' OR ";
$sql.="contacts.personal_address_line2 LIKE '%".$part."%' OR ";
$sql.="contacts.personal_address_city LIKE '%".$part."%' OR ";
$sql.="contacts.personal_address_zipcode LIKE '%".$part."%' OR ";
$sql.="contacts.company_name LIKE '%".$part."%' OR ";
$sql.="contacts.company_position LIKE '%".$part."%' OR ";
$sql.="contacts.company_address_line1 LIKE '%".$part."%' OR ";
$sql.="contacts.company_address_line2 LIKE '%".$part."%' OR ";
$sql.="contacts.company_address_city LIKE '%".$part."%' OR ";
$sql.="contacts.company_address_zipcode LIKE '%".$part."%' OR ";
$sql.="contacts.home_phonenumber LIKE '%".$part."%' OR ";
$sql.="contacts.company_phonenumber LIKE '%".$part."%' OR ";
$sql.="contacts.cell_phonenumber LIKE '%".$part."%' OR ";
$sql.="contacts.birthday_month LIKE '%".$part."%' OR ";
$sql.="contacts.birthday_day LIKE '%".$part."%' OR ";
$sql.="contacts.birthday_year LIKE '%".$part."%' OR ";
$sql.="contacts.facebook_username LIKE '%".$part."%' OR ";
$sql.="contacts.twitter_username LIKE '%".$part."%' OR ";
$sql.="contacts.googleplus_username LIKE '%".$part."%' OR ";
$sql.="contacts.linkedin_username LIKE '%".$part."%' OR ";
$sql.="contacts.personal_website_url LIKE '%".$part."%')";
$sql.=" ORDER BY contacts.date_created DESC";
$result=mysql_query($sql,$dbh);
if($result && mysql_num_rows($result)){
while(($row=mysql_fetch_assoc($result))!==false){
$tmpArr[$part][]=$row['contactid'];
}
}
}
foreach($tmpArr as $part => $data){
$tmpArr[$part] = array_unique($tmpArr[$part]);
}
if(count($tmpArr)>1){
$tmpArr = array_values(call_user_func_array("array_intersect", $tmpArr));
} else {
$tmpArr = $tmpArr[$searchParts[0]];
}
有什么想法吗?