Я собираю простой поисковик для небольшого сайта. Пользователи смогут искать своих друзей по email address
или name
. Я надеялся использовать поиск FULLTEXT, но я использую таблицы InnoDB, поэтому я возвращаюсь к LIKE %keyword%
.
Моя проблема в том, что имена и фамилии пользователей хранятся в двух отдельных столбцах. Как мне найти «правило Дэвида» в такой ситуации?
Вот что у меня есть на данный момент:
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;");
}