小さなサイト用の簡単な検索エンジンをまとめています。ユーザーはemail address
またはname
で友だちを検索できます。私はFULLTEXT検索を使いたいと思っていましたが、InnoDBテーブルを使用していますので、LIKE %keyword%
に戻ります。PHP/MySQL:簡易検索エンジン
私の問題は、ユーザーの姓と名が2つの別々の列に格納されていることです。 "David Rule"の検索はどうすればいいのでしょうか?それは一種の作品
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;");
}
パフォーマンスの観点からはありません。このクエリはインデックスを使用することができないため、大きなテーブルや使用量が多いと、サーバが遅くなります。小さなテーブルの場合は大丈夫です。 –
@YourCommonSenseこれまでに検索された行は6千を超えません。そして、ごくまれにしかありません。それは受け入れられますか? –
「非常にまれに」というのは、1日に最大50回という意味です。 –