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