PHP高级搜索
我目前正在做一个网站,我需要一个非常先进的搜索引擎。我希望用户能够说PHP高级搜索,php,mysql,database,Php,Mysql,Database,我目前正在做一个网站,我需要一个非常先进的搜索引擎。我希望用户能够说Person@company或Product@Category。如何检测@符号或任何特殊字符,过滤掉它们,并根据返回的字符串生成单个变量。所以$a=Person和$b=company将其作为格式为a=Person&b=company等的get请求发送。另一种方法正是您所说的,循环遍历字符串并逐个检查字符。当你遇到@符号时,你知道它前面的字母(不包括空格)是a的值,@(不包括空格)后面的所有字母都是b的值 抱歉,我试图尽可能清楚地
Person@company
或Product@Category
。如何检测@符号或任何特殊字符,过滤掉它们,并根据返回的字符串生成单个变量。所以$a=Person
和$b=company
将其作为格式为a=Person&b=company等的get请求发送。另一种方法正是您所说的,循环遍历字符串并逐个检查字符。当你遇到@符号时,你知道它前面的字母(不包括空格)是a的值,@(不包括空格)后面的所有字母都是b的值
抱歉,我试图尽可能清楚地说明问题。您可以使用拆分字符串:
$items = explode('@', 'Person @ Company', 2);
if(count($items) === 2) {
// Person @ Company
$person = trim($items[0]);
$company = trim($items[1]);
// Do your searching here...
} else {
// Search normally, not Person @ Company.
}
这是很容易实现的
function searchForPersonAtCompany($searchQuery) {
global $db;
$queryComponents = explode('@', $searchQuery, 2);
if (count($queryComponents) != 2) {
// '@' was not specified in the search query, return an empty array.
return array();
}
$person = $queryComponents[0];
$company = $queryComponents[1];
$sql = 'SELECT p.id AS personId, c.id AS companyId FROM people p JOIN companies c ON p.company = c.id WHERE p.name LIKE :person AND c.name LIKE :company';
$stmt = $db->prepare($sql);
$stmt->bindValue(':person', $person);
$stmt->bindValue(':company', $company);
$stmt->execute();
return $stmt->fetchAll();
}
您没有指定数据库架构,因此我不得不猜测您有一个人员
表和一个公司
表,其中人员与公司的表相关,并带有公司
字段
Table: People
id | name | company
--------------------------------------------
1 | Alice | 1
2 | Bob | 1
3 | Charles | 2
Table: Companies
id | name
--------------------------------------------
1 | Company A
2 | Company B
您必须根据自己的目的调整代码,但是使用我的测试数据,以下应该可以工作:
searchForPersonAtCompany('Alice@Company A');
searchForPersonAtCompany('Charles@Company B');
注:
- 这是一个非常简单的搜索实现,您最好研究一个基于数据库的搜索引擎,它将来可以处理更复杂的查询
- 我已经使用PDO作为到我的数据库(bindValue、exec等)的连接,您可能正在使用不同的东西<代码>:person和
只是SQL中的变量李>:company