1
我有任務通過數據庫查找內容,即使它在搜索時被拼寫錯誤,所以我正在使用strcmp比較查詢中的soundex。問題與我目前的代碼。如果我搜索AZUS,我的意思是華碩,並且有一個華碩的頭銜,它不會顯示出來。這是因爲在post_entry
華碩是<a href="">ASUS </a>
所以我將不得不在soundex("%'.$arraytagsd.'")
在我的代碼下面取出%
做到這一點,但是對於每個選項%s%或%s或s%或s會使我的腳本變慢。MySQL查詢中的Soundex不能正常工作
有沒有辦法更快地使用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);
?>
澄清:我將不得不做「%'。$ arraytagsd。'%」;然後是''。$ arraytagsd。'%'然後是'%'。$ arraytagsd。'「然後是''。$ arraytagsd。'」這會減慢腳本的速度 – kezi 2012-07-10 19:34:42
'「%'。$ arraytagsd。'%」'會匹配所有4,因爲'%'匹配0個或更多字符(像正則表達式中的*),**不是** 1個或更多字符(像正則表達式中的+) – DaveRandom 2012-07-10 19:46:00
......雖然說過,無論如何,'%'在soundex的上下文中是否有意義?我無法在[documentation](http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex)中的任何地方看到它...... – DaveRandom 2012-07-10 19:50:06