検索時につづりが間違っていても、データベースを通じてコンテンツを検索するクエリを作成するタスクがあるため、strcmp を使用してクエリの soundex を比較しています。現在のコードに問題があります。AZUS、つまり ASUS を検索すると、ASUS のタイトルが表示されません。これは、post_entry
ASUSでは、以下のコードでこれを行うために a<a href="">ASUS </a>
を実行する必要があるためですが、すべてのオプション %s% または %s または s% または s に対してスクリプトが遅くなります。soundex("%'.$arraytagsd.'")
%
とにかくsoundexを使用してこれをより速く行う方法はありますか?
検索入力の各単語を取得してデータベースと比較するために、この関数を作成しました
$colname_getPosts = $_GET['post_title'];
mysql_select_db($database_Main);
function test($string) {
$output = '';
$arrays = explode(' ', $string);
foreach ($arrays as $arraytagsd) {
$output .= ' OR strcmp(soundex(post_title), soundex("%'.$arraytagsd.'%")) = 0';
$output .= ' OR strcmp(soundex(post_entry), soundex("%'.$arraytagsd.'%")) = 0';
$output .= ' OR strcmp(soundex(tags), soundex("%'.$arraytagsd.'%")) = 0';
$output .= ' OR strcmp(soundex(post_author), soundex("%'.$arraytagsd.'%")) = 0';
}
return $output;
}
関連性でソートするクエリで使用します
$query_getPosts = "
SELECT post_id, post_date, post_title, post_author, post_entry, tags, sum(relevance)
FROM (
SELECT post_id, post_date, post_title, post_author, post_entry, tags, 10 AS relevance FROM blog_posts WHERE MATCH(post_title) AGAINST('%$colname_getPosts%' IN BOOLEAN MODE)
UNION
SELECT post_id, post_date, post_title, post_author, post_entry, tags, 2 AS relevance FROM blog_posts WHERE MATCH(post_author) AGAINST('%$colname_getPosts%' IN BOOLEAN MODE)".test($colname_getPosts)."
UNION
SELECT post_id, post_date, post_title, post_author, post_entry, tags, 5 AS relevance FROM blog_posts WHERE MATCH(post_entry) AGAINST('%$colname_getPosts%' IN BOOLEAN MODE)
UNION
SELECT post_id, post_date, post_title, post_author, post_entry, tags, 7 AS relevance FROM blog_posts WHERE MATCH(tags) AGAINST('%$colname_getPosts%' IN BOOLEAN MODE))results
GROUP BY post_id, post_date, post_title, post_author, post_entry, tags ORDER BY relevance DESC";
$getPosts = mysql_query($query_getPosts) or die(mysql_error());
$row_getPosts = mysql_fetch_assoc($getPosts);
$totalRows_getPosts = mysql_num_rows($getPosts);
?>