gpt4 book ai didi

php - 在 SQL 中是否可以将连字符和空格视为相同?

转载 作者:行者123 更新时间:2023-11-29 08:13:07 26 4
gpt4 key购买 nike

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

例如,如果他们有一篇名为“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";

最佳答案

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

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

我假设您将检查 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)
}
<小时/>

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

关于php - 在 SQL 中是否可以将连字符和空格视为相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21176965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com