是否可以在SQL中处理相同的连字符和空格?

时间:2014-01-17 02:48:39

标签: php mysql sql search

所以我正在为社交网站开发搜索功能,并搜索用户帖子。有些用户喜欢使用连字符而不是空格,但我希望搜索功能在结果中查找连字符和空格。

例如,如果他们有一个名为“SQL-IS AWESOME”的帖子并且我搜索“SQL IS AWESOME”,我还能找到该帖子吗?我尝试使用2个sql查询,一个用于原始搜索查询,另一个用于修改以将所有空格更改为连字符。

但如果我搜索“SQL IS-AWESOME”,它仍然无法找到它。有更简单的方法吗?

我目前的代码:

$sql = "SELECT * FROM posts 
WHERE (post_title='".$query."' 
OR post_title LIKE '%".$query."' 
OR post_title LIKE '%".$query."%' 
OR post_title LIKE '".$query."%') 
".$locquery."
".$cat."
ORDER BY date DESC
LIMIT 18";

1 个答案:

答案 0 :(得分:2)

正如有人建议的那样,你可以调整并使用全文搜索。

如果您选择采用此路线,则需要在所需字段上启用全文搜索。

我假设你会检查post_title和post_body(?),这需要你运行它;

ALTER TABLE `posts` ADD FULLTEXT KEY `post_search` (`post_title`,`post_body`);

完成后,您的搜索查询可以轻松编辑成为;

$sql = "SELECT * FROM `posts` WHERE MATCH(post_title,post_body) AGAINST '$search'";

如果你想要更好的匹配,也可以给它一个分数和顺序,这将需要类似的代码:

$sql = "SELECT *, MATCH(post_title, post_body) AGAINST ('{$search}') AS score ".
       "FROM `posts` WHERE MATCH(post_title, post_body) AGAINST ('{$search}') ORDER BY `score` DESC";

---注意

对于搜索,您需要弄清楚如何搜索。

在最后一个实例中我使用了类似的,我只是有一个搜索词的表单(命名为“搜索”),导致$ _POST ['search']被发送到服务器。

然后我用了;

$search = (array_key_exists('search', $_POST) && is_string($_POST['search'])) ? mysql_real_escape_string($_POST['search'], $c) : FALSE ;
if ($search) {
    // Do the fulltext query requires (See above)
}

由于全文搜索将忽略连字符,因此如果您选择使用得分结果,则只留下空格,这对于全文来说非常有用。