我正在爲一個小網站建立一個簡單的搜索引擎。用戶將能夠通過他們的email address
或name
搜索他們的朋友。我希望能夠使用FULLTEXT搜索,但我使用的是InnoDB表格,因此我可以回到LIKE %keyword%
。PHP/MySQL:簡單的搜索引擎
我的問題是,用戶有他們的名字和姓氏存儲在兩個單獨的列。我怎麼能去尋找「大衛規則」是這樣的情況?
這就是我目前所面對的:
if(filter_var($query,FILTER_VALIDATE_EMAIL)) {
$STH = $this->_db->prepare("SELECT UserID
FROM UserCredTable
WHERE EmailAddress = :query;");
} else {
$STH = $this->_db->prepare("SELECT UserID
FROM UserInfoTable
WHERE FirstName LIKE :query
OR LastName LIKE :query;");
}
它有點工作,但我猜相關性是非常不存在:(
我如何排序最相關結果
更新:
這看起來像一個體面的解決方案嗎?
if(filter_var($query,FILTER_VALIDATE_EMAIL)) {
$params["query"] = $query;
$STH = $this->_db->prepare("SELECT UserID
FROM UserCredentials
WHERE EmailAddress = :query;");
} else {
$params["query"] = "%".$query."%";
$STH = $this->_db->prepare("SELECT UserID
FROM UserDetails
WHERE CONCAT(FirstName,' ',LastName)
LIKE :query;");
}
它不會從性能的角度來看。這個查詢將無法使用索引,因此,對於大型表和/或大量使用它會使服務器變慢。儘管如此,小桌子還是可以的。 – 2012-03-19 18:07:53
@YourCommonSense不會有比以往尋覓了六千多行。而且很少。這可以接受嗎? – 2012-03-19 18:29:00
「非常罕見」意思是一天最多50次。 – 2012-03-19 18:36:34